From: Victor Toso <m...@victortoso.com>

When user cancels an authentication dialog, virt-viewer-session-vnc.c
will correctly emit "session-cancelled" and after that it will emit
"session-disconnected" which is not correct as the session's
connection was not establish at that moment.

We can track if the session has established a connection with the
signal "vnc-initialized" from VncDisplay.

This patch fixes a wrong authentication dialog that will be displayed
with VNC when it runs on kiosk mode after user tries to cancel or
close the authentication dialog.

The same fix was done for spice in 6480e52f62bc7c87bbdca1aa

Related: https://bugzilla.redhat.com/show_bug.cgi?id=1446161

Signed-off-by: Victor Toso <victort...@redhat.com>
---
 src/virt-viewer-session-vnc.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c
index 26fb405..9e9316e 100644
--- a/src/virt-viewer-session-vnc.c
+++ b/src/virt-viewer-session-vnc.c
@@ -40,6 +40,8 @@ struct _VirtViewerSessionVncPrivate {
     GtkWindow *main_window;
     /* XXX we should really just have a VncConnection */
     VncDisplay *vnc;
+    /* To workaround "vnc-disconnected" when session was not initialized */
+    gboolean initialized;
 };
 
 #define VIRT_VIEWER_SESSION_VNC_GET_PRIVATE(o) 
(G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_SESSION_VNC, 
VirtViewerSessionVncPrivate))
@@ -121,7 +123,10 @@ virt_viewer_session_vnc_disconnected(VncDisplay *vnc 
G_GNUC_UNUSED,
     virt_viewer_session_clear_displays(VIRT_VIEWER_SESSION(session));
     display = virt_viewer_display_vnc_new(session, session->priv->vnc);
     g_debug("Disconnected");
-    g_signal_emit_by_name(session, "session-disconnected", NULL);
+    if (session->priv->initialized)
+        g_signal_emit_by_name(session, "session-disconnected", NULL);
+
+    session->priv->initialized = FALSE;
     virt_viewer_display_set_enabled(VIRT_VIEWER_DISPLAY(display), FALSE);
     virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display),
                                       VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, 
FALSE);
@@ -131,6 +136,7 @@ static void
 virt_viewer_session_vnc_initialized(VncDisplay *vnc G_GNUC_UNUSED,
                                     VirtViewerSessionVnc *session)
 {
+    session->priv->initialized = TRUE;
     g_signal_emit_by_name(session, "session-initialized");
 }
 
@@ -408,6 +414,7 @@ virt_viewer_session_vnc_new(VirtViewerApp *app, GtkWindow 
*main_window)
     session->priv->vnc = VNC_DISPLAY(vnc_display_new());
     g_object_ref_sink(session->priv->vnc);
     session->priv->main_window = g_object_ref(main_window);
+    session->priv->initialized = FALSE;
 
     g_signal_connect(session->priv->vnc, "vnc-connected",
                      G_CALLBACK(virt_viewer_session_vnc_connected), session);
-- 
2.13.0

_______________________________________________
virt-tools-list mailing list
virt-tools-list@redhat.com
https://www.redhat.com/mailman/listinfo/virt-tools-list

Reply via email to