From 164f3fa3fd4fc37be043c7aa659cbe1f0cc94ab1 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 18 Jul 2019 10:06:38 -0400 Subject: [PATCH] appDisplay: Clear AllView reference to current popup when destroyed AllView contains a reference to the current popup that lingers after the popup is destroyed. This commit fixes that, by explicitly nullifying when appropriate. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 --- js/ui/appDisplay.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 7c2eaf027..8d63a4eec 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -285,6 +285,7 @@ var AllView = class AllView extends BaseAppView { this._eventBlocker.add_action(this._clickAction); this._displayingPopup = false; + this._currentPopupDestroyId = 0; this._availWidth = 0; this._availHeight = 0; @@ -574,7 +575,22 @@ var AllView = class AllView extends BaseAppView { this._stack.add_actor(popup.actor); popup.connect('open-state-changed', (popup, isOpen) => { this._eventBlocker.reactive = isOpen; - this._currentPopup = isOpen ? popup : null; + + if (this._currentPopup) { + this._currentPopup.actor.disconnect(this._currentPopupDestroyId); + this._currentPopupDestroyId = 0; + } + + this._currentPopup = null; + + if (isOpen) { + this._currentPopup = popup; + this._currentPopupDestroyId = popup.actor.connect('destroy', () => { + this._currentPopup = null; + this._currentPopupDestroyId = 0; + this._eventBlocker.reactive = false; + }); + } this._updateIconOpacities(isOpen); if (!isOpen) this._closeSpaceForPopup();