[gnome-shell/gbsneto/custom-icon-positions: 55/60] appDisplay: Only handle DnD when mapped



commit 6dec600d17fd667d0360532b9279deaf9f580cbc
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Jun 24 14:56:32 2020 -0300

    appDisplay: Only handle DnD when mapped
    
    Now that the DnD code is shared between AppDisplay and
    FolderView, we hit an unexpected problem: FolderView is
    handling drag events even when the folder dialog is hidden.
    As a side effect, this spams the journal with warnings.
    
    Only handle drag events when mapped. On unmap, disable
    the view's drag monitor, and disconnect from all drag
    events.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1284

 js/ui/appDisplay.js | 64 +++++++++++++++++++++++++++++++----------------------
 1 file changed, 37 insertions(+), 27 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 94b87bd18f..c8db3b919a 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -198,39 +198,16 @@ var BaseAppView = GObject.registerClass({
         this._targetDropPosition = null;
         this._nudgedItem = null;
 
-        this._dragBeginId =
-            Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
-        this._dragEndId =
-            Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
-        this._dragCancelledId =
-            Main.overview.connect('item-drag-cancelled', this._onDragCancelled.bind(this));
+        this._dragBeginId = -1;
+        this._dragEndId = -1;
+        this._dragCancelledId = -1;
 
         this.connect('destroy', this._onDestroy.bind(this));
     }
 
     _onDestroy() {
         this._removeDelayedMove();
-
-        if (this._dragBeginId > 0) {
-            Main.overview.disconnect(this._dragBeginId);
-            this._dragBeginId = 0;
-        }
-
-        if (this._dragEndId > 0) {
-            Main.overview.disconnect(this._dragEndId);
-            this._dragEndId = 0;
-        }
-
-        if (this._dragCancelledId > 0) {
-            Main.overview.disconnect(this._dragCancelledId);
-            this._dragCancelledId = 0;
-        }
-
-        if (this._dragMonitor) {
-            DND.removeDragMonitor(this._dragMonitor);
-            this._dragMonitor = null;
-        }
-
+        this._disconnectDnD();
     }
 
     _createGrid() {
@@ -317,6 +294,37 @@ var BaseAppView = GObject.registerClass({
         });
     }
 
+    _connectDnD() {
+        this._dragBeginId =
+            Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
+        this._dragEndId =
+            Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
+        this._dragCancelledId =
+            Main.overview.connect('item-drag-cancelled', this._onDragCancelled.bind(this));
+    }
+
+    _disconnectDnD() {
+        if (this._dragBeginId > 0) {
+            Main.overview.disconnect(this._dragBeginId);
+            this._dragBeginId = 0;
+        }
+
+        if (this._dragEndId > 0) {
+            Main.overview.disconnect(this._dragEndId);
+            this._dragEndId = 0;
+        }
+
+        if (this._dragCancelledId > 0) {
+            Main.overview.disconnect(this._dragCancelledId);
+            this._dragCancelledId = 0;
+        }
+
+        if (this._dragMonitor) {
+            DND.removeDragMonitor(this._dragMonitor);
+            this._dragMonitor = null;
+        }
+    }
+
     _maybeMoveItem(dragEvent) {
         const [success, x, y] =
             this._grid.transform_stage_point(dragEvent.x, dragEvent.y);
@@ -698,12 +706,14 @@ var BaseAppView = GObject.registerClass({
 
     vfunc_map() {
         this._swipeTracker.enabled = true;
+        this._connectDnD();
         super.vfunc_map();
     }
 
     vfunc_unmap() {
         this._swipeTracker.enabled = false;
         this._clearAnimateLater();
+        this._disconnectDnD();
         super.vfunc_unmap();
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]