appDisplay: Add destroy handler for FolderIcon

It is important that the FolderView of a FolderIcon always
gets destroyed before the AppFolderPopup, since the view
may or may not be in the popup, and the view should
get cleaned up exactly once in either case.

This commit adds a destroy handler on FolderIcon to ensure
things get taken down in the right order, and to make sure
the view isn't leaked if it's not yet part of the popup.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628
This commit is contained in:
Ray Strode 2019-07-22 10:57:57 -04:00 committed by Ray Strode
parent 164f3fa3fd
commit da9f37e629

View File

@ -1142,6 +1142,7 @@ var FolderIcon = class FolderIcon {
this.view.actor.vscroll.adjustment.value = 0;
this._openSpaceForPopup();
});
this.actor.connect('destroy', this.onDestroy.bind(this));
this.actor.connect('notify::mapped', () => {
if (!this.actor.mapped && this._popup)
this._popup.popdown();
@ -1151,6 +1152,13 @@ var FolderIcon = class FolderIcon {
this._redisplay();
}
onDestroy() {
this.view.actor.destroy();
if (this._popup)
this._popup.actor.destroy();
}
getAppIds() {
return this.view.getAllItems().map(item => item.id);
}
@ -1325,7 +1333,6 @@ var AppFolderPopup = class AppFolderPopup {
global.focus_manager.add_group(this.actor);
source.actor.connect('destroy', () => this.actor.destroy());
this._grabHelper = new GrabHelper.GrabHelper(this.actor, {
actionMode: Shell.ActionMode.POPUP
});