From 8de30c3b6e617fa342251251062dcd28fd12ade4 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 24 Nov 2023 12:37:03 +0100 Subject: [PATCH] core: Disconnect notify::is-grabbed signal when closing display Given destruction order, the display goes away before the stage, so this lingering signal connection may trigger unintended crashes. Fixes: 05eeb684d1 ("window: Postpone focusing until grab ended if uninteractable") Part-of: --- src/core/display.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/display.c b/src/core/display.c index ace30c8d6..8b5dc5a07 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1223,6 +1223,8 @@ void meta_display_close (MetaDisplay *display, guint32 timestamp) { + MetaBackend *backend = backend_from_display (display); + ClutterActor *stage = meta_backend_get_stage (backend); MetaCompositor *compositor; MetaLaters *laters; @@ -1272,6 +1274,8 @@ meta_display_close (MetaDisplay *display, meta_display_shutdown_keys (display); + g_signal_handlers_disconnect_by_func (stage, on_is_grabbed_changed, display); + g_clear_object (&display->bell); g_clear_object (&display->startup_notification); g_clear_object (&display->workspace_manager);