ack ----- Original Message ----- > still need review on this. haven't noticed any regressions in the past week. > > > ----- Original Message ----- > > From: "Jonathon Jongsma" <jjongsma@xxxxxxxxxx> > > To: virt-tools-list@xxxxxxxxxx > > Sent: Thursday, March 6, 2014 4:15:25 PM > > Subject: [PATCH virt-viewer] Don't resize guest display > > on zoom change > > > > When the zoom level is changed, the virt-viewer window gets resized. But we > > don't want this to trigger a resize of the guest display. But occasionally > > rounding errors cause the guest display to be reconfigured when zooming > > out. > > To > > fix this, we first check whether the current size is the preferred size. > > If > > it > > is, we don't send down a resize command to the guest. > > > > In addition to preventing guest resizes in response to zooming, it also > > improves > > the behavior when the guest display resolution is changed from within the > > guest. > > Before this change, we'd have the following behavior: > > A. guest changes display to WxH > > B. client gets notified of change and resizes the window to WxH > > C. client responds to window resize by sending a new monitor config > > command to the guest > > > > With this change, the extra step C will be avoided because we're already at > > the > > preferred size. > > > > Resolves: rhbz#1004051 > > --- > > > > Here's a more complete patch that doesn't cause the regression I mentioned > > in > > the last email. > > > > A quick description of the regression: when more tha one display was > > enabled, > > the displays would initially show up at the right size and then be resized > > down > > to very small (<400x400) size. > > > > Quick summary of the cause of the regression: windows are created with a > > default > > size of 400x400. When the display is initially added to the window and > > shown, > > it will cause an initial allocation of slightly less than 400x400, followed > > by a > > resize to the actual the size of display. It's a bit surprising that this > > ever > > worked properly, but my previous patch was enough to violate some > > assumptions, > > causing it to break. > > > > The solution is to ignore all allocations that happen before the widget is > > mapped to screen. We really don't want to be sending guest resize commands > > due > > to allocations that aren't due to explicit user actions. > > > > > > src/virt-viewer-display-spice.c | 21 ++++++++++++++++++++- > > 1 file changed, 20 insertions(+), 1 deletion(-) > > > > diff --git a/src/virt-viewer-display-spice.c > > b/src/virt-viewer-display-spice.c > > index d13fbda..a803ab0 100644 > > --- a/src/virt-viewer-display-spice.c > > +++ b/src/virt-viewer-display-spice.c > > @@ -190,9 +190,28 @@ virt_viewer_display_spice_mouse_grab(SpiceDisplay > > *display G_GNUC_UNUSED, > > > > static void > > virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self, > > - GtkAllocation *allocation > > G_GNUC_UNUSED, > > + GtkAllocation *allocation, > > 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; > > + } > > + > > if (self->priv->auto_resize != AUTO_RESIZE_NEVER) > > virt_viewer_display_spice_monitor_geometry_changed(self); > > > > -- > > 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 > _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list