Jonathon, On Fri, 2014-12-12 at 17:05 -0600, Jonathon Jongsma wrote: > In order to solve several problems with sizing and resizing displays, a > 'map' handler was added to VirtViewerDisplay. The first time the map > handler runs, its queues a resize to attempt to ensure that the window > gets created at its desired size. Subsequent map events generate a call > to _make_resizable(), which was an attempt to ensure that the window was > always 'shrinkable' on the Microsoft Windows platform. Recent testing > suggests that this _make_resizable() is not actually necessary on > Windows anymore, since it is possible to shrink the display even when > this call is removed. > > In addition, the call to _queue_resize() is a bit of an indirect > solution to the problem of ensuring the proper size at startup. What we > really want is to guarantee that the very first size request negotiation > returns the desired size rather than the minimum size. In order to do > this, we've added a flag to determine whether we've ever received a size > request, and if not, we return our desired size, even if 'dirty' is not > set. > --- > > NOTE: I've tested this on Fedora 20, RHEL 6, and Windows XP (built on Fedora > 20). I've been attempting to test a windows build that was built on RHEL6 as > well (to ensure that the behavior is the same when bundled with e.g. RHEL6 > versions of gtk2, etc), but I've not succeeded yet. It turns out that it's not > straightforward to make a windows build of git master on RHEL6. So that's a bit > of an open question yet... I've been following this work and I consider wait for someone's else ACK apart from mine. (Marc-André? Christophe?) > > src/virt-viewer-display.c | 22 +++------------------- > 1 file changed, 3 insertions(+), 19 deletions(-) > > diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c > index e6bc108..9c9c796 100644 > --- a/src/virt-viewer-display.c > +++ b/src/virt-viewer-display.c > @@ -38,7 +38,7 @@ struct _VirtViewerDisplayPrivate > { > #if !GTK_CHECK_VERSION(3, 0, 0) > gboolean dirty; > - gboolean mapped_once; > + gboolean size_request_once; > #endif > guint desktopWidth; > guint desktopHeight; > @@ -54,7 +54,6 @@ struct _VirtViewerDisplayPrivate > #if !GTK_CHECK_VERSION(3, 0, 0) > static void virt_viewer_display_size_request(GtkWidget *widget, > GtkRequisition *requisition); > -static void virt_viewer_display_map(GtkWidget *widget); > #else > static void virt_viewer_display_get_preferred_width(GtkWidget *widget, > int *minwidth, > @@ -106,7 +105,6 @@ virt_viewer_display_class_init(VirtViewerDisplayClass *class) > widget_class->get_preferred_height = virt_viewer_display_get_preferred_height; > #else > widget_class->size_request = virt_viewer_display_size_request; > - widget_class->map = virt_viewer_display_map; > #endif > widget_class->size_allocate = virt_viewer_display_size_allocate; > widget_class->grab_focus = virt_viewer_display_grab_focus; > @@ -423,13 +421,14 @@ virt_viewer_display_size_request(GtkWidget *widget, > VirtViewerDisplay *display = VIRT_VIEWER_DISPLAY(widget); > VirtViewerDisplayPrivate *priv = display->priv; > > - if (priv->dirty) { > + if (priv->dirty || !priv->size_request_once) { > virt_viewer_display_get_preferred_size(display, requisition); > } else { > requisition->width = 50; > requisition->height = 50; > } > > + priv->size_request_once = TRUE; > g_debug("Display size request %dx%d (desktop %dx%d)", > requisition->width, requisition->height, > priv->desktopWidth, priv->desktopHeight); > @@ -450,21 +449,6 @@ virt_viewer_display_make_resizable(VirtViewerDisplay *self) > } > } > > -static void > -virt_viewer_display_map(GtkWidget *widget) > -{ > - VirtViewerDisplay* self = VIRT_VIEWER_DISPLAY(widget); > - > - GTK_WIDGET_CLASS(virt_viewer_display_parent_class)->map(widget); > - > - if (!self->priv->mapped_once) > - virt_viewer_display_queue_resize(self); > - else > - virt_viewer_display_make_resizable(self); > - > - self->priv->mapped_once = TRUE; > -} > - > #else > > static void virt_viewer_display_get_preferred_width(GtkWidget *widget, Please, initialize the priv->size_request_once as FALSE in virt_viewer_display_init(). ACK from my side. _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list