From af2838d53555253a0b6a0740e177e810f6e7150c Mon Sep 17 00:00:00 2001 From: kyte Date: Mon, 21 Feb 2022 20:06:50 +0530 Subject: [PATCH] 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: --- 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 0acc3e562..f13252827 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; }