windowManager: Check whether metaWindow is NULL after destroy animation

When logging out or terminating gnome-shell, mutter will unmanage all
open windows, triggering the window-close animation in gnome-shell and
very quickly after that emitting "kill-window-effects". That means we'll
call _destroyWindowDone() to cleanup our animation data, but at this
point the MetaWindow of the window is already gone, so we get an error
that get_meta_window() returns NULL.

Fix that by checking whether get_meta_window() returned NULL and if it
did, don't access the window.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2018

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1483>
This commit is contained in:
Jonas Dreßler 2020-10-24 22:24:35 +02:00
parent 07fd0d3f2e
commit 96dc6d19dd

View File

@ -1614,7 +1614,7 @@ var WindowManager = class {
_destroyWindowDone(shellwm, actor) { _destroyWindowDone(shellwm, actor) {
if (this._destroying.delete(actor)) { if (this._destroying.delete(actor)) {
let parent = actor.get_meta_window().get_transient_for(); const parent = actor.get_meta_window()?.get_transient_for();
if (parent && actor._parentDestroyId) { if (parent && actor._parentDestroyId) {
parent.disconnect(actor._parentDestroyId); parent.disconnect(actor._parentDestroyId);
actor._parentDestroyId = 0; actor._parentDestroyId = 0;