forked from AuroraMiddleware/gtk
GtkWindow: default size is only for initial map
Bring back need_default_size. We need it to preserve this documented behavior: The default size of a window only affects the first time a window is shown; if a window is hidden and re-shown, it will remember the size it had prior to hiding, rather than using the default size. With this patch, all of the window sizing tests in gtk/tests/window pass again.
This commit is contained in:
parent
689905c1b4
commit
fc10ee8d4a
@ -163,6 +163,7 @@ struct _GtkWindowPrivate
|
|||||||
* and on unrealize (for size).
|
* and on unrealize (for size).
|
||||||
*/
|
*/
|
||||||
guint need_default_position : 1;
|
guint need_default_position : 1;
|
||||||
|
guint need_default_size : 1;
|
||||||
|
|
||||||
guint above_initially : 1;
|
guint above_initially : 1;
|
||||||
guint accept_focus : 1;
|
guint accept_focus : 1;
|
||||||
@ -1282,6 +1283,7 @@ gtk_window_init (GtkWindow *window)
|
|||||||
priv->resizable = TRUE;
|
priv->resizable = TRUE;
|
||||||
priv->configure_notify_received = FALSE;
|
priv->configure_notify_received = FALSE;
|
||||||
priv->position = GTK_WIN_POS_NONE;
|
priv->position = GTK_WIN_POS_NONE;
|
||||||
|
priv->need_default_size = TRUE;
|
||||||
priv->need_default_position = TRUE;
|
priv->need_default_position = TRUE;
|
||||||
priv->modal = FALSE;
|
priv->modal = FALSE;
|
||||||
priv->gdk_type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
|
priv->gdk_type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
|
||||||
@ -5399,6 +5401,7 @@ gtk_window_map (GtkWidget *widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* No longer use the default settings */
|
/* No longer use the default settings */
|
||||||
|
priv->need_default_size = FALSE;
|
||||||
priv->need_default_position = FALSE;
|
priv->need_default_position = FALSE;
|
||||||
|
|
||||||
if (priv->reset_type_hint)
|
if (priv->reset_type_hint)
|
||||||
@ -5878,6 +5881,7 @@ gtk_window_unrealize (GtkWidget *widget)
|
|||||||
*
|
*
|
||||||
* Default positioning is reset on unmap, instead of unrealize.
|
* Default positioning is reset on unmap, instead of unrealize.
|
||||||
*/
|
*/
|
||||||
|
priv->need_default_size = TRUE;
|
||||||
info = gtk_window_get_geometry_info (window, FALSE);
|
info = gtk_window_get_geometry_info (window, FALSE);
|
||||||
if (info)
|
if (info)
|
||||||
{
|
{
|
||||||
@ -7849,6 +7853,7 @@ gtk_window_compute_configure_request_size (GtkWindow *window,
|
|||||||
gint *width,
|
gint *width,
|
||||||
gint *height)
|
gint *height)
|
||||||
{
|
{
|
||||||
|
GtkWindowPrivate *priv = window->priv;
|
||||||
GtkWindowGeometryInfo *info;
|
GtkWindowGeometryInfo *info;
|
||||||
int w, h;
|
int w, h;
|
||||||
|
|
||||||
@ -7858,46 +7863,38 @@ gtk_window_compute_configure_request_size (GtkWindow *window,
|
|||||||
|
|
||||||
info = gtk_window_get_geometry_info (window, FALSE);
|
info = gtk_window_get_geometry_info (window, FALSE);
|
||||||
|
|
||||||
gtk_window_guess_default_size (window, width, height);
|
if (priv->need_default_size)
|
||||||
|
{
|
||||||
|
gtk_window_guess_default_size (window, width, height);
|
||||||
|
gtk_window_get_remembered_size (window, &w, &h);
|
||||||
|
*width = MAX (*width, w);
|
||||||
|
*height = MAX (*height, h);
|
||||||
|
|
||||||
/* If window is empty so requests 0, default to random nonzero size */
|
/* If window is empty so requests 0, default to random nonzero size */
|
||||||
if (*width == 0 && *height == 0)
|
if (*width == 0 && *height == 0)
|
||||||
{
|
{
|
||||||
*width = 200;
|
*width = 200;
|
||||||
*height = 200;
|
*height = 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Override with default size */
|
/* Override with default size */
|
||||||
if (info)
|
if (info)
|
||||||
{
|
{
|
||||||
if (info->default_width > 0)
|
if (info->default_width > 0)
|
||||||
*width = info->default_width;
|
*width = info->default_width;
|
||||||
if (info->default_height > 0)
|
if (info->default_height > 0)
|
||||||
*height = info->default_height;
|
*height = info->default_height;
|
||||||
|
|
||||||
if (info->default_is_geometry)
|
if (info->default_is_geometry)
|
||||||
geometry_size_to_pixels (geometry, flags,
|
geometry_size_to_pixels (geometry, flags,
|
||||||
info->default_width > 0 ? width : NULL,
|
info->default_width > 0 ? width : NULL,
|
||||||
info->default_height > 0 ? height : NULL);
|
info->default_height > 0 ? height : NULL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/* Override with last size of this window */
|
else
|
||||||
gtk_window_get_remembered_size (window, &w, &h);
|
|
||||||
*width = MAX (*width, w);
|
|
||||||
*height = MAX (*height, h);
|
|
||||||
|
|
||||||
/* Override any size with gtk_window_resize() values */
|
|
||||||
if (info)
|
|
||||||
{
|
{
|
||||||
if (info->resize_width > 0)
|
/* Default to keeping current size */
|
||||||
*width = info->resize_width;
|
gtk_window_get_remembered_size (window, width, height);
|
||||||
if (info->resize_height > 0)
|
|
||||||
*height = info->resize_height;
|
|
||||||
|
|
||||||
if (info->resize_is_geometry)
|
|
||||||
geometry_size_to_pixels (geometry, flags,
|
|
||||||
info->resize_width > 0 ? width : NULL,
|
|
||||||
info->resize_height > 0 ? height : NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't ever request zero width or height, it's not supported by
|
/* Don't ever request zero width or height, it's not supported by
|
||||||
|
Loading…
Reference in New Issue
Block a user