[gnome-shell/wip/exalm/gestures-part-2: 11/11] workspacesView: Add timeout for mouse scrolling



commit 6292b9be354fbc464475c1feb9fc91828f95f2cc
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Wed Oct 16 10:39:48 2019 +0500

    workspacesView: Add timeout for mouse scrolling
    
    Prevent uncontrollably fast scrolling. Use the same duration as switching
    animation, but add a separate timeout to account for disabled animations.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1338
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/825

 js/ui/workspacesView.js | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 70288772d8..c896eff1e1 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -1,7 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported WorkspacesView, WorkspacesDisplay */
 
-const { Clutter, Gio, GObject, Meta, Shell, St } = imports.gi;
+const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
 
 const Main = imports.ui.main;
 const WindowManager = imports.ui.windowManager;
@@ -486,11 +486,13 @@ class WorkspacesDisplay extends St.Widget {
         this._restackedNotifyId = 0;
         this._scrollEventId = 0;
         this._keyPressEventId = 0;
+        this._scrollTimeoutId = 0;
 
         this._fullGeometry = null;
 
         this._scrolling = false; // swipe-scrolling
         this._gestureActive = false; // touch(pad) gestures
+        this._canScroll = true; // limiting scrolling speed
 
         this.connect('destroy', this._onDestroy.bind(this));
     }
@@ -507,6 +509,11 @@ class WorkspacesDisplay extends St.Widget {
             Meta.later_remove(this._parentSetLater);
             this._parentSetLater = 0;
         }
+
+        if (this._scrollTimeoutId != 0) {
+            GLib.source_remove(this._scrollTimeoutId);
+            this._scrollTimeoutId = 0;
+        }
     }
 
     _workspacesReordered() {
@@ -789,6 +796,9 @@ class WorkspacesDisplay extends St.Widget {
             this._getMonitorIndexForEvent(event) != this._primaryIndex)
             return Clutter.EVENT_PROPAGATE;
 
+        if (!this._canScroll)
+            return Clutter.EVENT_PROPAGATE;
+
         let workspaceManager = global.workspace_manager;
         let activeWs = workspaceManager.get_active_workspace();
         let ws;
@@ -809,6 +819,16 @@ class WorkspacesDisplay extends St.Widget {
             return Clutter.EVENT_PROPAGATE;
         }
         Main.wm.actionMoveWorkspace(ws);
+
+        this._canScroll = false;
+        this._scrollTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
+            WORKSPACE_SWITCH_TIME, () => {
+                this._canScroll = true;
+                this._scrollTimeoutId = 0;
+                return GLib.SOURCE_REMOVE;
+            }
+        );
+
         return Clutter.EVENT_STOP;
     }
 


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