From 3db1058c2cc844629efea46de1fa2171ff8d09e8 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sat, 29 Jun 2019 01:32:40 -0300 Subject: [PATCH] appIcon: End running drag operations on destroy AppIcon makes itself draggable, and handles the various DnD routines such as 'drag-begin' and 'drag-end' by making the Overview emit the appropriate signals. However, when destroyed, the AppIcon does not try to finish any drag operations that started. That causes the event blocker in AllView not to be updated correctly when dragging icons to outside folders. Make AppIcon emit 'item-drag-end' when a drag operation started and it's destroyed. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/643 --- js/ui/appDisplay.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index c1b916a59..e7510a36c 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1532,13 +1532,16 @@ var AppIcon = class AppIcon { if (isDraggable) { this._draggable = DND.makeDraggable(this.actor); this._draggable.connect('drag-begin', () => { + this._dragging = true; this._removeMenuTimeout(); Main.overview.beginItemDrag(this); }); this._draggable.connect('drag-cancelled', () => { + this._dragging = false; Main.overview.cancelledItemDrag(this); }); this._draggable.connect('drag-end', () => { + this._dragging = false; Main.overview.endItemDrag(this); }); } @@ -1555,6 +1558,10 @@ var AppIcon = class AppIcon { _onDestroy() { if (this._stateChangedId > 0) this.app.disconnect(this._stateChangedId); + if (this._draggable && this._dragging) { + Main.overview.endItemDrag(this); + this.draggable = null; + } this._stateChangedId = 0; this._removeMenuTimeout(); }