appDisplay: Disconnect Main item-drag signals on icons destruction

Icons connect to overview's item-drag events to react to start/end drags,
however the icons should disconnect from signals once destroyed.

So, disconnect from Main events once the actors have been destroyed.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1511

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/677
This commit is contained in:
Marco Trevisan (Treviño) 2019-08-09 23:27:57 +02:00
parent ada01507a4
commit 35dbc3fcc9

View File

@ -1433,10 +1433,10 @@ var FolderIcon = class FolderIcon {
this.view = new FolderView(this._folder, id, parentView); this.view = new FolderView(this._folder, id, parentView);
Main.overview.connect('item-drag-begin', this._itemDragBeginId = Main.overview.connect(
this._onDragBegin.bind(this)); 'item-drag-begin', this._onDragBegin.bind(this));
Main.overview.connect('item-drag-end', this._itemDragEndId = Main.overview.connect(
this._onDragEnd.bind(this)); 'item-drag-end', this._onDragEnd.bind(this));
this.actor.connect('clicked', this.open.bind(this)); this.actor.connect('clicked', this.open.bind(this));
this.actor.connect('destroy', this.onDestroy.bind(this)); this.actor.connect('destroy', this.onDestroy.bind(this));
@ -1450,6 +1450,9 @@ var FolderIcon = class FolderIcon {
} }
onDestroy() { onDestroy() {
Main.overview.disconnect(this._itemDragBeginId);
Main.overview.disconnect(this._itemDragEndId);
this.view.actor.destroy(); this.view.actor.destroy();
if (this._spaceReadySignalId) { if (this._spaceReadySignalId) {
@ -1870,8 +1873,10 @@ var AppIcon = class AppIcon {
}); });
} }
Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this)); this._itemDragBeginId = Main.overview.connect(
Main.overview.connect('item-drag-end', this._onDragEnd.bind(this)); 'item-drag-begin', this._onDragBegin.bind(this));
this._itemDragEndId = Main.overview.connect(
'item-drag-end', this._onDragEnd.bind(this));
this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
@ -1883,6 +1888,9 @@ var AppIcon = class AppIcon {
} }
_onDestroy() { _onDestroy() {
Main.overview.disconnect(this._itemDragBeginId);
Main.overview.disconnect(this._itemDragEndId);
if (this._folderPreviewId > 0) { if (this._folderPreviewId > 0) {
GLib.source_remove(this._folderPreviewId); GLib.source_remove(this._folderPreviewId);
this._folderPreviewId = 0; this._folderPreviewId = 0;