Blob Blame History Raw
From 376225cea044d050f8fc2923e7149d320150bab7 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 29 Apr 2019 13:46:37 -0400
Subject: [PATCH] window: free close dialog before unmanaging window from
 compositor

When an application stops responding, the shell darkens its windows.

If a window from a not-responding application gets unmanaged
then the shell will currently throw an exception trying to retrieve
the now-dissociated window actor.

That leads to a "stuck window" ghost on screen and a traceback
in the log.

This commit addresses the problem by making sure the effect is cleaned
up before the actor is disocciated from its window.

https://gitlab.gnome.org/GNOME/mutter/issues/575
---
 src/core/window.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/core/window.c b/src/core/window.c
index cc0813ac4..aa85806f1 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1388,6 +1388,8 @@ meta_window_unmanage (MetaWindow  *window,
   meta_verbose ("Unmanaging %s\n", window->desc);
   window->unmanaging = TRUE;
 
+  meta_window_free_delete_dialog (window);
+
 #ifdef HAVE_WAYLAND
   /* This needs to happen for both Wayland and XWayland clients,
    * so it can't be in MetaWindowWayland. */
@@ -1510,7 +1512,6 @@ meta_window_unmanage (MetaWindow  *window,
   meta_window_unqueue (window, META_QUEUE_CALC_SHOWING |
                                META_QUEUE_MOVE_RESIZE |
                                META_QUEUE_UPDATE_ICON);
-  meta_window_free_delete_dialog (window);
 
   set_workspace_state (window, FALSE, NULL);
 
-- 
2.23.0