mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-16 15:14:17 +00:00
wayland: Avoid negative size constraints
Setting the shadow width earlier as done with commit4cb1b96
to address bug 771561 proved to cause unexpected side effects on size_allocate signal propagation. As the window is sized correctly earlier, the size_allocate signal is not emitted again in gtk_widget_size_allocate_with_baseline() which prevents clutter-gtk from relocating its child widget correctly. To avoid this issue, revert commit4cb1b96
but make sure the values passed as min and max size is never negative in Wayland as this is a protocol error. With this, the min/max size will be wrong for a short amount of time, during the state transition, until the shadow width is updated from gdk_window_set_shadow_width(). This approach is much safer and less intrusive than changing the size_allocate logic in gtk. This reverts commit4cb1b9645e
. Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=771915
This commit is contained in:
parent
b684b23c74
commit
dbd0923b5f
@ -2992,8 +2992,8 @@ gdk_wayland_window_set_geometry_hints (GdkWindow *window,
|
||||
|
||||
if (geom_mask & GDK_HINT_MIN_SIZE)
|
||||
{
|
||||
width = geometry->min_width - (impl->margin_left + impl->margin_right);
|
||||
height = geometry->min_height - (impl->margin_top + impl->margin_bottom);
|
||||
width = MAX (0, geometry->min_width - (impl->margin_left + impl->margin_right));
|
||||
height = MAX (0, geometry->min_height - (impl->margin_top + impl->margin_bottom));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3005,8 +3005,8 @@ gdk_wayland_window_set_geometry_hints (GdkWindow *window,
|
||||
|
||||
if (geom_mask & GDK_HINT_MAX_SIZE)
|
||||
{
|
||||
width = geometry->max_width - (impl->margin_left + impl->margin_right);
|
||||
height = geometry->max_height - (impl->margin_top + impl->margin_bottom);
|
||||
width = MAX (0, geometry->max_width - (impl->margin_left + impl->margin_right));
|
||||
height = MAX (0, geometry->max_height - (impl->margin_top + impl->margin_bottom));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -7528,19 +7528,6 @@ update_window_style_classes (GtkWindow *window)
|
||||
gtk_style_context_remove_class (context, "fullscreen");
|
||||
}
|
||||
|
||||
static void
|
||||
update_window_borders (GtkWindow *window)
|
||||
{
|
||||
GtkWindowPrivate *priv = window->priv;
|
||||
GtkBorder window_border = { 0 };
|
||||
|
||||
if (priv->client_decorated && priv->use_client_shadow)
|
||||
{
|
||||
get_shadow_width (window, &window_border);
|
||||
update_shadow_width (window, &window_border);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
popover_size_allocate (GtkWidget *widget,
|
||||
GtkWindowPopover *popover,
|
||||
@ -7811,7 +7798,6 @@ gtk_window_state_event (GtkWidget *widget,
|
||||
{
|
||||
update_window_style_classes (window);
|
||||
update_window_buttons (window);
|
||||
update_window_borders (window);
|
||||
gtk_widget_queue_resize (widget);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user