[gnome-shell] workspacesView: Add Home and End keys for workspace navigation



commit af2838d53555253a0b6a0740e177e810f6e7150c
Author: kyte <kyteinsky gmail com>
Date:   Mon Feb 21 20:06:50 2022 +0530

    workspacesView: Add Home and End keys for workspace navigation
    
    This commit adds support for Home and End keys to move
    to the first and last workspace respectively.
    Previously only Page_Up and Page_Down were recognized
    to move one workspace at a time in overview mode.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2201>

 js/ui/workspacesView.js | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 0acc3e5620..f132528271 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -1158,31 +1158,46 @@ class WorkspacesDisplay extends St.Widget {
         const vertical = workspaceManager.layout_rows === -1;
         const rtl = this.get_text_direction() === Clutter.TextDirection.RTL;
 
-        let dir;
+        let which;
         switch (event.get_key_symbol()) {
         case Clutter.KEY_Page_Up:
             if (vertical)
-                dir = Meta.MotionDirection.UP;
+                which = Meta.MotionDirection.UP;
             else if (rtl)
-                dir = Meta.MotionDirection.RIGHT;
+                which = Meta.MotionDirection.RIGHT;
             else
-                dir = Meta.MotionDirection.LEFT;
+                which = Meta.MotionDirection.LEFT;
             break;
         case Clutter.KEY_Page_Down:
             if (vertical)
-                dir = Meta.MotionDirection.DOWN;
+                which = Meta.MotionDirection.DOWN;
             else if (rtl)
-                dir = Meta.MotionDirection.LEFT;
+                which = Meta.MotionDirection.LEFT;
             else
-                dir = Meta.MotionDirection.RIGHT;
+                which = Meta.MotionDirection.RIGHT;
+            break;
+        case Clutter.KEY_Home:
+            which = 0;
+            break;
+        case Clutter.KEY_End:
+            which = workspaceManager.n_workspaces - 1;
             break;
         default:
             return Clutter.EVENT_PROPAGATE;
         }
 
-        const ws = workspaceManager.get_active_workspace().get_neighbor(dir);
+        let ws;
+        if (which < 0)
+            // Negative workspace numbers are directions
+            // with respect to the current workspace
+            ws = workspaceManager.get_active_workspace().get_neighbor(which);
+        else
+            // Otherwise it is a workspace index
+            ws = workspaceManager.get_workspace_by_index(which);
+
         if (ws)
             Main.wm.actionMoveWorkspace(ws);
+
         return Clutter.EVENT_STOP;
     }
 


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