summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2014-12-12 16:45:42 -0600
committerJonathon Jongsma <jjongsma@redhat.com>2015-01-06 09:13:50 -0600
commitc2eb85c712ba4267202468d8d226d181f0d6bb30 (patch)
tree65dd4af0b1f7ecae1acc270d2f04302f4dc2b0e4
parentf05f30d7de7e604a90ddf9131d898b1f4522464d (diff)
downloadvirt-viewer-c2eb85c712ba4267202468d8d226d181f0d6bb30.tar.gz
virt-viewer-c2eb85c712ba4267202468d8d226d181f0d6bb30.tar.xz
virt-viewer-c2eb85c712ba4267202468d8d226d181f0d6bb30.zip
Remove 'map' handler for VirtViewerDisplay
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.
-rw-r--r--src/virt-viewer-display.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c
index e6bc108..66429f1 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;
@@ -282,6 +280,7 @@ virt_viewer_display_init(VirtViewerDisplay *display)
display->priv->zoom = TRUE;
#if !GTK_CHECK_VERSION(3, 0, 0)
display->priv->dirty = TRUE;
+ display->priv->size_request_once = FALSE;
#endif
}
@@ -423,13 +422,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 +450,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,