appDisplay: Stop watching FolderIcon parent view when destroyed

When a FolderIcon is opened, it asks the parent view to allocate
space for it, which takes time.  Eventually, the space-ready
signal is emitted on the view and the icon can make use of the new
space with its popup.  If the icon gets destroyed in the
interim, though, space-ready signal handler still fires.

This commit disconnects the signal handler so it doesn't get called
on a destroyed icon.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628
This commit is contained in:
Ray Strode 2019-07-18 14:49:30 -04:00 committed by Ray Strode
parent da9f37e629
commit 49260a85ad

View File

@ -1155,6 +1155,11 @@ var FolderIcon = class FolderIcon {
onDestroy() { onDestroy() {
this.view.actor.destroy(); this.view.actor.destroy();
if (this._spaceReadySignalId) {
this._parentView.disconnect(this._spaceReadySignalId);
this._spaceReadySignalId = 0;
}
if (this._popup) if (this._popup)
this._popup.actor.destroy(); this._popup.actor.destroy();
} }
@ -1226,8 +1231,9 @@ var FolderIcon = class FolderIcon {
} }
_openSpaceForPopup() { _openSpaceForPopup() {
let id = this._parentView.connect('space-ready', () => { this._spaceReadySignalId = this._parentView.connect('space-ready', () => {
this._parentView.disconnect(id); this._parentView.disconnect(this._spaceReadySignalId);
this._spaceReadySignalId = 0;
this._popup.popup(); this._popup.popup();
this._updatePopupPosition(); this._updatePopupPosition();
}); });