You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
5.7 KiB
135 lines
5.7 KiB
From de5cd71013532d1a1240315c92fd0b5ca708fe01 Mon Sep 17 00:00:00 2001
|
|
From: Uri Lublin <uril@redhat.com>
|
|
Date: Tue, 27 Oct 2020 19:53:36 +0200
|
|
Subject: [PATCH] vnc: show an error dialog upon vnc-error
|
|
|
|
For example when connecting by accident to a spice server
|
|
|
|
Signed-off-by: Uri Lublin <uril@redhat.com>
|
|
---
|
|
src/virt-viewer-app.c | 20 +++++++++++++++++---
|
|
src/virt-viewer-session-vnc.c | 13 +++++++++++++
|
|
src/virt-viewer-session.c | 9 +++++++++
|
|
3 files changed, 39 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
|
|
index c0e0c9c..8cfdc2d 100644
|
|
--- a/src/virt-viewer-app.c
|
|
+++ b/src/virt-viewer-app.c
|
|
@@ -78,6 +78,9 @@ void virt_viewer_app_about_delete(GtkWidget *dialog, void *dummy, VirtViewerApp
|
|
/* Internal methods */
|
|
static void virt_viewer_app_connected(VirtViewerSession *session,
|
|
VirtViewerApp *self);
|
|
+static void virt_viewer_app_error(VirtViewerSession *session G_GNUC_UNUSED,
|
|
+ const gchar *msg,
|
|
+ VirtViewerApp *self);
|
|
static void virt_viewer_app_initialized(VirtViewerSession *session,
|
|
VirtViewerApp *self);
|
|
static void virt_viewer_app_disconnected(VirtViewerSession *session,
|
|
@@ -1292,6 +1295,8 @@ virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type, GError **
|
|
|
|
g_signal_connect(priv->session, "session-initialized",
|
|
G_CALLBACK(virt_viewer_app_initialized), self);
|
|
+ g_signal_connect(priv->session, "session-error",
|
|
+ G_CALLBACK(virt_viewer_app_error), self);
|
|
g_signal_connect(priv->session, "session-connected",
|
|
G_CALLBACK(virt_viewer_app_connected), self);
|
|
g_signal_connect(priv->session, "session-disconnected",
|
|
@@ -1654,8 +1659,6 @@ virt_viewer_app_connected(VirtViewerSession *session G_GNUC_UNUSED,
|
|
virt_viewer_app_show_status(self, _("Connected to graphic server"));
|
|
}
|
|
|
|
-
|
|
-
|
|
static void
|
|
virt_viewer_app_initialized(VirtViewerSession *session G_GNUC_UNUSED,
|
|
VirtViewerApp *self)
|
|
@@ -1690,6 +1693,18 @@ virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, const gch
|
|
virt_viewer_app_deactivate(self, connect_error);
|
|
}
|
|
|
|
+static void
|
|
+virt_viewer_app_error(VirtViewerSession *session G_GNUC_UNUSED,
|
|
+ const gchar *msg,
|
|
+ VirtViewerApp *self)
|
|
+{
|
|
+ VirtViewerAppPrivate *priv = self->priv;
|
|
+
|
|
+ priv->connected = FALSE; /* display error dialog */
|
|
+
|
|
+ virt_viewer_app_disconnected(session, msg, self);
|
|
+}
|
|
+
|
|
static void virt_viewer_app_cancelled(VirtViewerSession *session,
|
|
VirtViewerApp *self)
|
|
{
|
|
@@ -1698,7 +1713,6 @@ static void virt_viewer_app_cancelled(VirtViewerSession *session,
|
|
virt_viewer_app_disconnected(session, NULL, self);
|
|
}
|
|
|
|
-
|
|
static void virt_viewer_app_auth_refused(VirtViewerSession *session,
|
|
const char *msg,
|
|
VirtViewerApp *self)
|
|
diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c
|
|
index 261d984..2598c70 100644
|
|
--- a/src/virt-viewer-session-vnc.c
|
|
+++ b/src/virt-viewer-session-vnc.c
|
|
@@ -128,6 +128,15 @@ virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED,
|
|
VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, FALSE);
|
|
}
|
|
|
|
+static void
|
|
+virt_viewer_session_vnc_error(VncDisplay *vnc G_GNUC_UNUSED,
|
|
+ const gchar* msg,
|
|
+ VirtViewerSessionVnc *session)
|
|
+{
|
|
+ g_warning("vnc-session: got vnc error %s", msg);
|
|
+ g_signal_emit_by_name(session, "session-error", msg);
|
|
+}
|
|
+
|
|
static void
|
|
virt_viewer_session_vnc_initialized(VncDisplay *vnc G_GNUC_UNUSED,
|
|
VirtViewerSessionVnc *session)
|
|
@@ -386,6 +395,8 @@ virt_viewer_session_vnc_close(VirtViewerSession* session)
|
|
G_CALLBACK(virt_viewer_session_vnc_initialized), session);
|
|
g_signal_connect(self->priv->vnc, "vnc-disconnected",
|
|
G_CALLBACK(virt_viewer_session_vnc_disconnected), session);
|
|
+ g_signal_connect(self->priv->vnc, "vnc-error",
|
|
+ G_CALLBACK(virt_viewer_session_vnc_error), session);
|
|
|
|
g_signal_connect(self->priv->vnc, "vnc-bell",
|
|
G_CALLBACK(virt_viewer_session_vnc_bell), session);
|
|
@@ -418,6 +429,8 @@ virt_viewer_session_vnc_new(VirtViewerApp *app, GtkWindow *main_window)
|
|
G_CALLBACK(virt_viewer_session_vnc_initialized), session);
|
|
g_signal_connect(session->priv->vnc, "vnc-disconnected",
|
|
G_CALLBACK(virt_viewer_session_vnc_disconnected), session);
|
|
+ g_signal_connect(session->priv->vnc, "vnc-error",
|
|
+ G_CALLBACK(virt_viewer_session_vnc_error), session);
|
|
|
|
g_signal_connect(session->priv->vnc, "vnc-bell",
|
|
G_CALLBACK(virt_viewer_session_vnc_bell), session);
|
|
diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c
|
|
index a809814..d58fc37 100644
|
|
--- a/src/virt-viewer-session.c
|
|
+++ b/src/virt-viewer-session.c
|
|
@@ -272,6 +272,15 @@ virt_viewer_session_class_init(VirtViewerSessionClass *class)
|
|
G_TYPE_NONE,
|
|
0);
|
|
|
|
+ g_signal_new("session-error",
|
|
+ G_OBJECT_CLASS_TYPE(object_class),
|
|
+ G_SIGNAL_RUN_FIRST,
|
|
+ 0,
|
|
+ NULL, NULL,
|
|
+ g_cclosure_marshal_VOID__STRING,
|
|
+ G_TYPE_NONE,
|
|
+ 1,
|
|
+ G_TYPE_STRING);
|
|
g_signal_new("session-disconnected",
|
|
G_OBJECT_CLASS_TYPE(object_class),
|
|
G_SIGNAL_RUN_FIRST,
|
|
--
|
|
2.28.0
|
|
|