Merge branch 'matthias/fix-min-size' into 'master'

Matthias/fix min size

See merge request GNOME/gtk!2404
This commit is contained in:
Matthias Clasen 2020-08-07 18:46:24 +00:00
commit 1ccab92813
4 changed files with 33 additions and 14 deletions

View File

@ -99,6 +99,7 @@ gdk_toplevel_notify_compute_size (GdkToplevel *toplevel,
GdkToplevelSize *size) GdkToplevelSize *size)
{ {
g_signal_emit (toplevel, signals[COMPUTE_SIZE], 0, size); g_signal_emit (toplevel, signals[COMPUTE_SIZE], 0, size);
gdk_toplevel_size_validate (size);
} }
static void static void

View File

@ -117,3 +117,19 @@ gdk_toplevel_size_set_min_size (GdkToplevelSize *size,
size->min_width = min_width; size->min_width = min_width;
size->min_height = min_height; size->min_height = min_height;
} }
void
gdk_toplevel_size_validate (GdkToplevelSize *size)
{
if (size->min_width > size->bounds_width ||
size->min_height > size->bounds_height)
g_warning ("GdkToplevelSize: min_size exceeds bounds");
if (size->width > size->bounds_width ||
size->height > size->bounds_height)
g_warning ("GdkToplevelSize: size exceeds bounds");
if (size->min_width > size->width ||
size->min_height > size->height)
g_warning ("GdkToplevelSize: min_size exceeds size");
}

View File

@ -36,4 +36,6 @@ void gdk_toplevel_size_init (GdkToplevelSize *size,
int bounds_width, int bounds_width,
int bounds_height); int bounds_height);
void gdk_toplevel_size_validate (GdkToplevelSize *size);
#endif /* __GDK_TOPLEVEL_SIZE_PRIVATE_H__ */ #endif /* __GDK_TOPLEVEL_SIZE_PRIVATE_H__ */

View File

@ -4272,26 +4272,26 @@ toplevel_compute_size (GdkToplevel *toplevel,
GtkWindowGeometryInfo *info; GtkWindowGeometryInfo *info;
int width, height; int width, height;
GtkBorder shadow; GtkBorder shadow;
int bounds_width, bounds_height;
int default_width, default_height;
int min_width, min_height; int min_width, min_height;
info = gtk_window_get_geometry_info (window, FALSE); info = gtk_window_get_geometry_info (window, FALSE);
if (priv->need_default_size)
{
int remembered_width;
int remembered_height;
int bounds_width;
int bounds_height;
gdk_toplevel_size_get_bounds (size, &bounds_width, &bounds_height); gdk_toplevel_size_get_bounds (size, &bounds_width, &bounds_height);
gtk_window_compute_default_size (window, gtk_window_compute_default_size (window,
bounds_width, bounds_height, bounds_width, bounds_height,
&width, &height); &default_width, &default_height);
if (priv->need_default_size)
{
int remembered_width;
int remembered_height;
gtk_window_get_remembered_size (window, gtk_window_get_remembered_size (window,
&remembered_width, &remembered_height); &remembered_width, &remembered_height);
width = MAX (width, remembered_width); width = MAX (default_width, remembered_width);
height = MAX (height, remembered_height); height = MAX (default_height, remembered_height);
/* Override with default size */ /* Override with default size */
if (info) if (info)
@ -4306,9 +4306,9 @@ toplevel_compute_size (GdkToplevel *toplevel,
INCLUDE_CSD_SIZE); INCLUDE_CSD_SIZE);
if (info->default_width > 0) if (info->default_width > 0)
width = default_width_csd; width = min_width = default_width_csd;
if (info->default_height > 0) if (info->default_height > 0)
height = default_height_csd; height = min_height = default_height_csd;
} }
} }
else else
@ -4348,8 +4348,8 @@ toplevel_compute_size (GdkToplevel *toplevel,
get_shadow_width (window, &shadow); get_shadow_width (window, &shadow);
min_width = width + shadow.left + shadow.right; min_width = MIN (default_width + shadow.left + shadow.right, width);
min_height = height + shadow.top + shadow.bottom; min_height = MIN (default_height + shadow.top + shadow.bottom, height);
gdk_toplevel_size_set_min_size (size, min_width, min_height); gdk_toplevel_size_set_min_size (size, min_width, min_height);
} }