On Mon, Jul 16, 2012 at 06:57:46PM +0200, Marc-André Lureau wrote: > This flag will help to track wether the display has been whether > removed/closed and whether it have a really a valid display. the part starting at "whether" needs fixing. "Whether it really has a valid display" ? > > Ready in contrast, is used to "hide" temporarily the display (when > starting or redrawing the display, to avoid artifacts) > --- > src/virt-viewer-app.c | 15 +++++++++------ > src/virt-viewer-display-spice.c | 20 ++++++++++++++++++++ > src/virt-viewer-display.c | 15 +++++++++++++++ > src/virt-viewer-display.h | 2 ++ > src/virt-viewer-window.c | 12 ++++++++++++ > 5 files changed, 58 insertions(+), 6 deletions(-) > > diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c > index e5c674a..f581531 100644 > --- a/src/virt-viewer-app.c > +++ b/src/virt-viewer-app.c > @@ -611,7 +611,8 @@ display_show_hint(VirtViewerDisplay *display, > { > VirtViewerApp *self; > VirtViewerNotebook *nb = virt_viewer_window_get_notebook(win); > - gint nth, hint; > + gint nth; > + guint hint; Doesn't this change belong to the patch turning 'hint' into a bitfield? Patch looks good otherwise. Christophe > > g_object_get(win, > "app", &self, > @@ -621,15 +622,17 @@ display_show_hint(VirtViewerDisplay *display, > "show-hint", &hint, > NULL); > > - if (hint == 0) { > + if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) { > + virt_viewer_window_hide(win); > + } else if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY) { > + virt_viewer_notebook_show_display(nb); > + virt_viewer_window_show(win); > + gtk_window_present(virt_viewer_window_get_window(win)); > + } else { > if (win != self->priv->main_window && > g_getenv("VIRT_VIEWER_HIDE")) > virt_viewer_window_hide(win); > virt_viewer_notebook_show_status(nb, _("Waiting for display %d..."), nth + 1); > - } else { > - virt_viewer_notebook_show_display(nb); > - virt_viewer_window_show(win); > - gtk_window_present(virt_viewer_window_get_window(win)); > } > > g_object_unref(self); > diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c > index 7bf9a9a..101abc5 100644 > --- a/src/virt-viewer-display-spice.c > +++ b/src/virt-viewer-display-spice.c > @@ -75,9 +75,26 @@ virt_viewer_display_spice_class_init(VirtViewerDisplaySpiceClass *klass) > } > > static void > +show_hint_changed(VirtViewerDisplay *self) > +{ > + SpiceMainChannel *main_channel = virt_viewer_session_spice_get_main_channel( > + VIRT_VIEWER_SESSION_SPICE(virt_viewer_display_get_session(self))); > + guint enabled = TRUE; > + guint nth; > + > + g_object_get(self, "nth-display", &nth, NULL); > + if (virt_viewer_display_get_show_hint(self) & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) > + enabled = FALSE; > + > + spice_main_set_display_enabled(main_channel, nth, enabled); > +} > + > +static void > virt_viewer_display_spice_init(VirtViewerDisplaySpice *self G_GNUC_UNUSED) > { > self->priv = VIRT_VIEWER_DISPLAY_SPICE_GET_PRIVATE(self); > + > + g_signal_connect(self, "notify::show-hint", G_CALLBACK(show_hint_changed), NULL); > } > > static void > @@ -166,6 +183,9 @@ virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self, > if (virt_viewer_display_get_auto_resize(VIRT_VIEWER_DISPLAY(self)) == FALSE) > return; > > + if (virt_viewer_display_get_show_hint(VIRT_VIEWER_DISPLAY(self)) & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) > + return; > + > if (virt_viewer_display_get_zoom(VIRT_VIEWER_DISPLAY(self))) { > zoom = virt_viewer_display_get_zoom_level(VIRT_VIEWER_DISPLAY(self)); > > diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c > index a954671..18fed19 100644 > --- a/src/virt-viewer-display.c > +++ b/src/virt-viewer-display.c > @@ -553,6 +553,21 @@ void virt_viewer_display_set_show_hint(VirtViewerDisplay *self, guint hint) > g_object_notify(G_OBJECT(self), "show-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); > +} > + > VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *self) > { > g_return_val_if_fail(VIRT_VIEWER_IS_DISPLAY(self), NULL); > diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h > index 225080d..89b4817 100644 > --- a/src/virt-viewer-display.h > +++ b/src/virt-viewer-display.h > @@ -57,6 +57,7 @@ typedef struct _VirtViewerDisplayChannel VirtViewerDisplayChannel; > > typedef enum { > VIRT_VIEWER_DISPLAY_SHOW_HINT_READY = 1 << 0, > + VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED = 1 << 1, > } VirtViewerDisplayShowHintFlags; > > /* perhaps this become an interface, and be pushed in gtkvnc and spice? */ > @@ -116,6 +117,7 @@ gboolean virt_viewer_display_get_auto_resize(VirtViewerDisplay *display); > void virt_viewer_display_release_cursor(VirtViewerDisplay *display); > > void virt_viewer_display_close(VirtViewerDisplay *display); > +void virt_viewer_display_set_enabled(VirtViewerDisplay *display, gboolean enabled); > > G_END_DECLS > > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 3f7cbbe..46e44be 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -1062,6 +1062,9 @@ virt_viewer_window_show(VirtViewerWindow *self) > { > gtk_widget_show(self->priv->window); > > + if (self->priv->display) > + virt_viewer_display_set_enabled(self->priv->display, TRUE); > + > if (self->priv->desktop_resize_pending) { > virt_viewer_window_resize(self); > self->priv->desktop_resize_pending = FALSE; > @@ -1072,6 +1075,15 @@ void > virt_viewer_window_hide(VirtViewerWindow *self) > { > gtk_widget_hide(self->priv->window); > + > + if (self->priv->display) { > + VirtViewerDisplay *display = self->priv->display; > + guint nth; > + > + g_object_get(display, "nth-display", &nth, NULL); > + if (nth != 0) > + virt_viewer_display_set_enabled(display, FALSE); > + } > } > > void > -- > 1.7.10.4 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list
Attachment:
pgpCBHF1xuOzX.pgp
Description: PGP signature