This patch still needs review. Any takers? ----- Original Message ----- > From: "Jonathon Jongsma" <jjongsma@xxxxxxxxxx> > To: virt-tools-list@xxxxxxxxxx > Sent: Friday, March 14, 2014 3:45:21 PM > Subject: [PATCH virt-viewer] Fix regression with enabling additional displays > > Commit 8fa942 broke enabling of additional displays. We don't want to send > down > display re-configurations due to events that happen while setting up windows > for > enabled displays that we recieve from the server. However, by ignoring > allocations on unmapped windows, we fail to send display configurations for > new > displays that a user is attempting to enable via the window menu. To > discriminate between these two cases, we check whether the display is in the > 'ready' state or not. > - Unmapped displays with the 'ready' hint set can be assumed to be displays > that are enabled on the server that we are attempting to create windows for > on > the client. In this case, we should *not* send a display configuration to > the > server > - Unmapped displays with the 'ready' hint cleared can be assumed to be > displays > that are not yet enabled on the server that we are trying to enable in the > client. In this case, we *should* send a display configuration to the > server > --- > src/virt-viewer-display-spice.c | 36 ++++++++++++++++++++---------------- > 1 file changed, 20 insertions(+), 16 deletions(-) > > diff --git a/src/virt-viewer-display-spice.c > b/src/virt-viewer-display-spice.c > index c44dfcb..76dfb47 100644 > --- a/src/virt-viewer-display-spice.c > +++ b/src/virt-viewer-display-spice.c > @@ -189,22 +189,26 @@ > virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self, > gpointer data G_GNUC_UNUSED) > { > GtkRequisition preferred; > - > - /* ignore all allocations before the widget gets mapped to screen since > we > - * only want to trigger guest resizing due to user actions > - */ > - if (!gtk_widget_get_mapped(GTK_WIDGET(self))) > - return; > - > - /* when the window gets resized due to a change in zoom level, we don't > want > - * to re-size the guest display. So if we get an allocation event that > - * resizes the window to the size it already wants to be (based on > desktop > - * size and zoom level), just return early > - */ > - gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred); > - if (preferred.width == allocation->width > - && preferred.height == allocation->height) { > - return; > + guint hint = > virt_viewer_display_get_show_hint(VIRT_VIEWER_DISPLAY(self)); > + > + if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY) > + { > + /* ignore all allocations before the widget gets mapped to screen > since we > + * only want to trigger guest resizing due to user actions > + */ > + if (!gtk_widget_get_mapped(GTK_WIDGET(self))) > + return; > + > + /* when the window gets resized due to a change in zoom level, we > don't want > + * to re-size the guest display. So if we get an allocation event > that > + * resizes the window to the size it already wants to be (based on > desktop > + * size and zoom level), just return early > + */ > + gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred); > + if (preferred.width == allocation->width > + && preferred.height == allocation->height) { > + return; > + } > } > > if (self->priv->auto_resize != AUTO_RESIZE_NEVER) > -- > 1.8.5.3 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list > _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list