From 09fbb4a127db2a3a3bfadf06d176f2645c5d93c8 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 6 Sep 2018 21:50:21 +0200 Subject: [PATCH] windowManager: listen actively to windows being destroyed during WS switch Prevents gjs from dealing with already dispose()d objects. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/539 (cherry-picked from b087752b5539a8cbb1d61979cb069aef8a3475be) --- js/ui/windowManager.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 8e7e7a6e5..49d70355c 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -1763,6 +1763,14 @@ var WindowManager = new Lang.Class({ } } + for (let i = 0; i < switchData.windows.length; i++) { + let w = switchData.windows[i]; + + w.windowDestroyId = w.window.connect('destroy', () => { + switchData.windows.splice(switchData.windows.indexOf(w), 1); + }); + } + switchData.inGroup.set_position(-xDest, -yDest); switchData.inGroup.raise_top(); @@ -1793,8 +1801,8 @@ var WindowManager = new Lang.Class({ for (let i = 0; i < switchData.windows.length; i++) { let w = switchData.windows[i]; - if (w.window.is_destroyed()) // Window gone - continue; + w.window.disconnect(w.windowDestroyId); + if (w.window.get_parent() == switchData.outGroup) { w.window.reparent(w.parent); w.window.hide();