surface-actor-x11: Only unredirect fullscreen windows for full damage

When deciding if a window should be unredirected because it was causing
fullscreen damage in the past, it was not considered whether the window
is still fullscreen. This could result in a floating window being
unredirected if it was chosen for unredirection because of
_NET_WM_BYPASS_COMPOSITOR = 1 and was previously fullscreened for >= 100
frames, long enough to change does_full_damage, before getting
unfullscreened.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2434
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2651>
This commit is contained in:
Sebastian Keller 2022-10-05 11:19:51 +02:00 committed by Marge Bot
parent cefa4044d1
commit 46fc94b67f

View File

@ -259,7 +259,7 @@ meta_surface_actor_x11_should_unredirect (MetaSurfaceActorX11 *self)
if (!meta_surface_actor_x11_is_opaque (META_SURFACE_ACTOR (self))) if (!meta_surface_actor_x11_is_opaque (META_SURFACE_ACTOR (self)))
return FALSE; return FALSE;
if (!self->does_full_damage && if (!(meta_window_is_fullscreen (self->window) && self->does_full_damage) &&
!meta_window_is_override_redirect (self->window)) !meta_window_is_override_redirect (self->window))
return FALSE; return FALSE;