diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index e97175d707..d5880b6e25 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -914,18 +914,6 @@ xdg_surface_configure (void *data, GdkWindowState new_state = 0; uint32_t *p; - if (width > 0 && height > 0) - { - gdk_window_constrain_size (&impl->geometry_hints, - impl->geometry_mask, - width + impl->margin_left + impl->margin_right, - height + impl->margin_top + impl->margin_bottom, - &width, - &height); - - gdk_wayland_window_configure (window, width, height, impl->scale); - } - wl_array_for_each (p, states) { uint32_t state = *p; @@ -948,6 +936,24 @@ xdg_surface_configure (void *data, } } + if (width > 0 && height > 0) + { + GdkWindowHints geometry_mask = impl->geometry_mask; + + /* Ignore size increments for maximized/fullscreen windows */ + if (new_state & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)) + geometry_mask &= ~GDK_HINT_RESIZE_INC; + + gdk_window_constrain_size (&impl->geometry_hints, + geometry_mask, + width + impl->margin_left + impl->margin_right, + height + impl->margin_top + impl->margin_bottom, + &width, + &height); + + gdk_wayland_window_configure (window, width, height, impl->scale); + } + GDK_NOTE (EVENTS, g_message ("configure, window %p %dx%d,%s%s%s", window, width, height, diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 799f3aaec5..e0d6e8b3f8 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -9582,7 +9582,16 @@ gtk_window_constrain_size (GtkWindow *window, gint *new_width, gint *new_height) { - gdk_window_constrain_size (geometry, flags, width, height, + GtkWindowPrivate *priv = window->priv; + guint geometry_flags; + + /* ignore size increments for maximized/fullscreen windows */ + if (priv->maximized || priv->fullscreen) + geometry_flags = flags & ~GDK_HINT_RESIZE_INC; + else + geometry_flags = flags; + + gdk_window_constrain_size (geometry, geometry_flags, width, height, new_width, new_height); }