wayland: Don't always restore the saved size when floating
authorJonas Ådahl <jadahl@gmail.com>
Tue, 18 Jan 2022 14:45:30 +0000 (15:45 +0100)
committerJonas Ådahl <jadahl@gmail.com>
Tue, 18 Jan 2022 14:46:10 +0000 (15:46 +0100)
We only save the size when we transition from floating to fixed, so that
we can restore the size to the one prior to being fixed.

However, we should not restore to this size whenever we see a 0x0 size
from xdg_toplevel, as it can do that any time it doesn't care about the
size, e.g. when the surface is floating and just changing state.

Fix this by only using the saved size when transitioning from fixed to
floating, not when staying floating while previously floating.

Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4634
gdk/wayland/gdksurface-wayland.c

index 93498d7cb5df509bff232f4ba7afe935f6b4e069..49309ffa8646ac8506e5c61b59ceb2a3fea03849 100644 (file)
@@ -1477,6 +1477,7 @@ gdk_wayland_surface_configure_toplevel (GdkSurface *surface)
   int width, height;
   gboolean is_resizing;
   gboolean fixed_size;
+  gboolean was_fixed_size;
   gboolean saved_size;
 
   new_state = impl->pending.toplevel.state;
@@ -1491,6 +1492,11 @@ gdk_wayland_surface_configure_toplevel (GdkSurface *surface)
                  GDK_TOPLEVEL_STATE_TILED) ||
     is_resizing;
 
+  was_fixed_size =
+    surface->state & (GDK_TOPLEVEL_STATE_MAXIMIZED |
+                      GDK_TOPLEVEL_STATE_FULLSCREEN |
+                      GDK_TOPLEVEL_STATE_TILED);
+
   width = impl->pending.toplevel.width;
   height = impl->pending.toplevel.height;
 
@@ -1503,7 +1509,7 @@ gdk_wayland_surface_configure_toplevel (GdkSurface *surface)
    * the client should configure its size back to what it was before
    * being maximize or fullscreen.
    */
-  if (saved_size && !fixed_size)
+  if (saved_size && !fixed_size && was_fixed_size)
     {
       width = impl->saved_width;
       height = impl->saved_height;