window/wayland: Detect client resizes with pending non-resizes

The previous code was trying to detect client resizes by only
considering resizes without any pending configurations as client
resizes. There can however be pending configurations that do not involve
resizing, such as ones triggered by state changes. These may also stay
unacknowledged by the client until the next size change. This was
causing client resizes after showing the window (and therefore changing
its status to focused) to not be detected as client resize.

Fix this by checking whether the queue has any configuration with size
changes rather than just whether it is empty.

Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2023
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2103>
This commit is contained in:
Sebastian Keller 2021-11-22 07:42:08 +01:00 committed by Marge Bot
parent 67033b0acd
commit d66e3e2d8a

View File

@ -861,6 +861,22 @@ acquire_acked_configuration (MetaWindowWayland *wl_window,
return NULL;
}
static gboolean
has_pending_resize (MetaWindowWayland *wl_window)
{
GList *l;
for (l = wl_window->pending_configurations; l; l = l->next)
{
MetaWaylandWindowConfiguration *configuration = l->data;
if (configuration->has_size)
return TRUE;
}
return FALSE;
}
int
meta_window_wayland_get_geometry_scale (MetaWindow *window)
{
@ -944,7 +960,7 @@ meta_window_wayland_finish_move_resize (MetaWindow *window,
flags = META_MOVE_RESIZE_WAYLAND_FINISH_MOVE_RESIZE;
if (!wl_window->pending_configurations)
if (!has_pending_resize (wl_window))
flags |= META_MOVE_RESIZE_WAYLAND_CLIENT_RESIZE;
acked_configuration = acquire_acked_configuration (wl_window, pending);