win32: fix first window un-shrinkable at start

The fix 0dca975d64 make the first window
unshrinkable right after start. Wait until the window is mapped and
remove the dirty-resizable state after (win32/gtk2).
This commit is contained in:
Marc-André Lureau 2013-07-18 15:06:00 +02:00
parent e2dce44aa2
commit c34ec01b3d

View File

@ -54,6 +54,7 @@ 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,
@ -105,6 +106,7 @@ 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;
@ -409,6 +411,29 @@ virt_viewer_display_size_request(GtkWidget *widget,
priv->desktopWidth, priv->desktopHeight);
}
static void
virt_viewer_display_make_resizable(VirtViewerDisplay *self)
{
VirtViewerDisplayPrivate *priv = self->priv;
/* This unsets the size request, so that the user can
* manually resize the window smaller again
*/
if (priv->dirty) {
g_idle_add(virt_viewer_display_idle, GTK_WIDGET(self));
if (gtk_widget_get_mapped(GTK_WIDGET(self)))
priv->dirty = FALSE;
}
}
static void
virt_viewer_display_map(GtkWidget *widget)
{
GTK_WIDGET_CLASS(virt_viewer_display_parent_class)->map(widget);
virt_viewer_display_make_resizable(VIRT_VIEWER_DISPLAY(widget));
}
#else
static void virt_viewer_display_get_preferred_width(GtkWidget *widget,
@ -501,14 +526,7 @@ virt_viewer_display_size_allocate(GtkWidget *widget,
#if !GTK_CHECK_VERSION(3, 0, 0)
end:
/* This unsets the size request, so that the user can
* manually resize the window smaller again
*/
if (priv->dirty) {
g_idle_add(virt_viewer_display_idle, widget);
if (gtk_widget_get_mapped(widget))
priv->dirty = FALSE;
}
virt_viewer_display_make_resizable(VIRT_VIEWER_DISPLAY(widget));
#endif
}