--- src/virt-viewer-display-spice.c | 9 +-------- src/virt-viewer-display.c | 20 ++++++++++---------- src/virt-viewer-display.h | 2 +- src/virt-viewer-session-vnc.c | 8 ++++---- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c index a91d73e..bbc1773 100644 --- a/src/virt-viewer-display-spice.c +++ b/src/virt-viewer-display-spice.c @@ -140,19 +140,12 @@ display_ready(GObject *display, GParamSpec *pspec G_GNUC_UNUSED, VirtViewerDisplay *self) { - guint hint; gboolean ready; g_object_get(display, "ready", &ready, NULL); DEBUG_LOG("display %p ready:%d", self, ready); - hint = virt_viewer_display_get_show_hint(self); - if (ready) - hint |= VIRT_VIEWER_DISPLAY_SHOW_HINT_READY; - else - hint &= ~VIRT_VIEWER_DISPLAY_SHOW_HINT_READY; - - virt_viewer_display_set_show_hint(self, hint); + virt_viewer_display_set_show_hint(self, VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, ready); } static void diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c index 4612970..b8e6d67 100644 --- a/src/virt-viewer-display.c +++ b/src/virt-viewer-display.c @@ -551,12 +551,20 @@ guint virt_viewer_display_get_show_hint(VirtViewerDisplay *self) return self->priv->show_hint; } -void virt_viewer_display_set_show_hint(VirtViewerDisplay *self, guint hint) +void virt_viewer_display_set_show_hint(VirtViewerDisplay *self, guint mask, gboolean enabled) { VirtViewerDisplayPrivate *priv; + guint hint; g_return_if_fail(VIRT_VIEWER_IS_DISPLAY(self)); priv = self->priv; + hint = priv->show_hint; + + if (enabled) + hint |= mask; + else + hint &= ~mask; + if (priv->show_hint == hint) return; @@ -566,17 +574,9 @@ void virt_viewer_display_set_show_hint(VirtViewerDisplay *self, guint hint) void virt_viewer_display_set_enabled(VirtViewerDisplay *self, gboolean enabled) { - guint hint; - g_return_if_fail(VIRT_VIEWER_IS_DISPLAY(self)); - hint = virt_viewer_display_get_show_hint(self); - if (enabled) - hint &= ~VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED; - else - hint |= VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED; - - virt_viewer_display_set_show_hint(self, hint); + virt_viewer_display_set_show_hint(self, VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED, !enabled); } VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *self) diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h index 4247570..d838c07 100644 --- a/src/virt-viewer-display.h +++ b/src/virt-viewer-display.h @@ -110,7 +110,7 @@ gboolean virt_viewer_display_get_zoom(VirtViewerDisplay *display); void virt_viewer_display_send_keys(VirtViewerDisplay *display, const guint *keyvals, int nkeyvals); GdkPixbuf* virt_viewer_display_get_pixbuf(VirtViewerDisplay *display); -void virt_viewer_display_set_show_hint(VirtViewerDisplay *display, guint hint); +void virt_viewer_display_set_show_hint(VirtViewerDisplay *display, guint mask, gboolean enabled); guint virt_viewer_display_get_show_hint(VirtViewerDisplay *display); VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *display); void virt_viewer_display_set_auto_resize(VirtViewerDisplay *display, gboolean auto_resize); diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c index 238c865..52baf5c 100644 --- a/src/virt-viewer-session-vnc.c +++ b/src/virt-viewer-session-vnc.c @@ -95,7 +95,7 @@ virt_viewer_session_vnc_connected(VncDisplay *vnc G_GNUC_UNUSED, GtkWidget *display = virt_viewer_display_vnc_new(session->priv->vnc); g_signal_emit_by_name(session, "session-connected"); virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display), - VIRT_VIEWER_DISPLAY_SHOW_HINT_READY); + VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, TRUE); virt_viewer_session_add_display(VIRT_VIEWER_SESSION(session), VIRT_VIEWER_DISPLAY(display)); } @@ -104,11 +104,11 @@ static void virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED, VirtViewerSessionVnc *session) { + GtkWidget *display = virt_viewer_display_vnc_new(session->priv->vnc); DEBUG_LOG("Disconnected"); g_signal_emit_by_name(session, "session-disconnected"); - /* TODO perhaps? */ - /* virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(session->priv->vnc), */ - /* VIRT_VIEWER_DISPLAY_SHOW_HINT_HIDE); */ + virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display), + VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, FALSE); } static void -- 1.7.10.4