From 68c5fa340d5c1b4134a4fd25c831fd10a92104c0 Mon Sep 17 00:00:00 2001 From: Kirill Primak Date: Tue, 25 Jan 2022 22:30:36 +0300 Subject: [PATCH] subsurface: unlock cached state on commit if desynced wl_subsurface::set_desync description states: "If cached state exists when wl_surface.commit is called in desynchronized mode, the pending state is added to the cached state, and applied as a whole." This commit reintroduces an implementation of said behavior, previously removed in 7daf6da9ac05be2cb74c0983e3caee0b21db75d4. Strictly speaking, this logic isn't fully correct, as the cached state and the pending state are applied individually instead, if the cached state isn't locked by anything else. However, the end result is still the same. This commit fixes the issue with Firefox permission popups. (cherry picked from commit 77951968dc9df7214c04c33f4905a9a7aa92f60c) --- types/wlr_surface.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/types/wlr_surface.c b/types/wlr_surface.c index 6a0992fe..ac89f0a9 100644 --- a/types/wlr_surface.c +++ b/types/wlr_surface.c @@ -534,6 +534,9 @@ static void subsurface_commit(struct wlr_subsurface *subsurface) { } subsurface->has_cache = true; subsurface->cached_seq = wlr_surface_lock_pending(surface); + } else if (subsurface->has_cache) { + wlr_surface_unlock_cached(surface, subsurface->cached_seq); + subsurface->has_cache = false; } }