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
This commit is contained in:
Ray Strode 2019-04-29 13:46:37 -04:00
parent eccf7b105c
commit 502da973eb

View File

@ -1427,6 +1427,8 @@ meta_window_unmanage (MetaWindow *window,
if (window->unmanage_idle_id) if (window->unmanage_idle_id)
g_source_remove (window->unmanage_idle_id); g_source_remove (window->unmanage_idle_id);
meta_window_free_delete_dialog (window);
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
/* This needs to happen for both Wayland and XWayland clients, /* This needs to happen for both Wayland and XWayland clients,
* so it can't be in MetaWindowWayland. */ * so it can't be in MetaWindowWayland. */
@ -1549,7 +1551,6 @@ meta_window_unmanage (MetaWindow *window,
meta_window_unqueue (window, META_QUEUE_CALC_SHOWING | meta_window_unqueue (window, META_QUEUE_CALC_SHOWING |
META_QUEUE_MOVE_RESIZE | META_QUEUE_MOVE_RESIZE |
META_QUEUE_UPDATE_ICON); META_QUEUE_UPDATE_ICON);
meta_window_free_delete_dialog (window);
set_workspace_state (window, FALSE, NULL); set_workspace_state (window, FALSE, NULL);