diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 1af45d88d7d5f0f368b9d2da0d24c9cffb7e30ea..50259041870831f03a3474614cc9d1b292df2f89 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -1142,22 +1142,39 @@ class WorkspacesDisplay extends St.Widget { } _onKeyPressEvent(actor, event) { - if (!this.mapped) + const { ControlsState } = OverviewControls; + if (this._overviewAdjustment.value !== ControlsState.WINDOW_PICKER) return Clutter.EVENT_PROPAGATE; - let workspaceManager = global.workspace_manager; - let activeWs = workspaceManager.get_active_workspace(); - let ws; + + const { workspaceManager } = global; + const vertical = workspaceManager.layout_rows === -1; + const rtl = this.get_text_direction() === Clutter.TextDirection.RTL; + + let dir; switch (event.get_key_symbol()) { case Clutter.KEY_Page_Up: - ws = activeWs.get_neighbor(Meta.MotionDirection.UP); + if (vertical) + dir = Meta.MotionDirection.UP; + else if (rtl) + dir = Meta.MotionDirection.RIGHT; + else + dir = Meta.MotionDirection.LEFT; break; case Clutter.KEY_Page_Down: - ws = activeWs.get_neighbor(Meta.MotionDirection.DOWN); + if (vertical) + dir = Meta.MotionDirection.DOWN; + else if (rtl) + dir = Meta.MotionDirection.LEFT; + else + dir = Meta.MotionDirection.RIGHT; break; default: return Clutter.EVENT_PROPAGATE; } - Main.wm.actionMoveWorkspace(ws); + + const ws = workspaceManager.get_active_workspace().get_neighbor(dir); + if (ws) + Main.wm.actionMoveWorkspace(ws); return Clutter.EVENT_STOP; }