[gnome-shell-extensions/wip/rstrode/heads-up-display: 52/62] fileItem: Ignore double click distance clicking on items




commit 042e427b8d46b81fd8abbedbb5307403eea8bb69
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Jan 27 16:55:10 2021 +0100

    fileItem: Ignore double click distance clicking on items
    
    Imitate the behavior of Nautilus canvas WRT double clicks being
    handled on all of the icon(s) without accounting for the double
    click distance. As the extension does already lean on Nautilus
    look & feel, it seems to make sense doing this.
    
    This is not as crucial for mice as it is for touchscreens, where
    the default 5px limit may be a bit on the short side depending
    on device sensitivity.

 extensions/desktop-icons/fileItem.js | 26 +++++++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)
---
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index d6d43c9..5d3195f 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -65,6 +65,9 @@ var FileItem = class {
         this._setMetadataCancellable = null;
         this._queryFileInfoCancellable = null;
         this._isSpecial = this._fileExtra != Prefs.FileType.NONE;
+        this._lastClickTime = 0;
+        this._lastClickButton = 0;
+        this._clickCount = 0;
 
         this._file = file;
 
@@ -642,7 +645,24 @@ var FileItem = class {
         DesktopIconsUtil.launchTerminal(this.file.get_path());
     }
 
+    _updateClickState(event) {
+        let settings = Clutter.Settings.get_default();
+        if ((event.get_button() == this._lastClickButton) &&
+            ((event.get_time() - this._lastClickTime) < settings.double_click_time))
+            this._clickCount++;
+        else
+            this._clickCount = 1;
+
+        this._lastClickTime = event.get_time();
+        this._lastClickButton = event.get_button();
+    }
+
+    _getClickCount() {
+        return this._clickCount;
+    }
+
     _onPressButton(actor, event) {
+        this._updateClickState(event);
         let button = event.get_button();
         if (button == 3) {
             if (!this.isSelected)
@@ -661,7 +681,7 @@ var FileItem = class {
                 this._actionTrash.setSensitive(!specialFilesSelected);
             return Clutter.EVENT_STOP;
         } else if (button == 1) {
-            if (event.get_click_count() == 1) {
+            if (this._getClickCount() == 1) {
                 let [x, y] = event.get_coords();
                 this._primaryButtonPressed = true;
                 this._buttonPressInitialX = x;
@@ -710,12 +730,12 @@ var FileItem = class {
                 this._primaryButtonPressed = false;
                 let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK);
                 let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK);
-                if ((event.get_click_count() == 1) && Prefs.CLICK_POLICY_SINGLE && !shiftPressed && 
!controlPressed)
+                if ((this._getClickCount() == 1) && Prefs.CLICK_POLICY_SINGLE && !shiftPressed && 
!controlPressed)
                     this.doOpen();
                 this.emit('selected', shiftPressed || controlPressed, false, true);
                 return Clutter.EVENT_STOP;
             }
-            if ((event.get_click_count() == 2) && (!Prefs.CLICK_POLICY_SINGLE))
+            if ((this._getClickCount() == 2) && (!Prefs.CLICK_POLICY_SINGLE))
                 this.doOpen();
         }
         return Clutter.EVENT_PROPAGATE;


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