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
This commit is contained in:
Ray Strode 2019-07-18 10:06:38 -04:00 committed by Ray Strode
parent 8e75d81a44
commit 164f3fa3fd

View File

@ -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();