From 8ec8a26717909b729b57539c5d16cf23c417ad90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 6 May 2022 17:49:50 +0200 Subject: [PATCH] display: Unmanage windows before compositor Prior to 'compositor: Destroy actors when unmanaging', window actors were destroyed when the compositor object was destroyed, long after the windows were unmanaged, however, when this instead changed to happen when unmanaging, with the original goal to avoid having these actors try to interact with the disposed MetaCompositor instance, it caused an issue where window actors would be indirectly destroyed as a side effect of their parents being destroyed, which caused some fallout in the logic handling window-close animation tracking, which relies on meta_window_actor_queue_destroy() being called before a window actor is actually destroyed. Fix this by unmanaging windows before unmanaging the compositor. From an X11 point of view, this should be harmless, since all it really do is call XCompositeUnredirectSubwindows(). For the native backend and the common behavior, all unmanaging the compositor instance does is destroy clutter actors, so doing so after window actors were already cleaned up should not be a problem, as this was the case before too. Fixes: 35ac3a096d84de97c1da9a54d99aebf7640c1c07 Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5330 Part-of: --- src/core/display.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/display.c b/src/core/display.c index 058d09f2a..fdf6d31a8 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1132,9 +1132,8 @@ meta_display_close (MetaDisplay *display, g_signal_emit (display, display_signals[CLOSING], 0); - meta_compositor_unmanage (display->compositor); - meta_display_unmanage_windows (display, timestamp); + meta_compositor_unmanage (display->compositor); meta_prefs_remove_listener (prefs_changed_callback, display);