From 1cee7e676002a792718bd5a956f7783a8066e57f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 24 Jan 2022 17:00:36 +0100 Subject: [PATCH] overviewControls: Handle keyboard navigation The old view selector used to handle initiating keynav into pages. That code became inactive when non-search related functionality was moved elsewhere, and was finally removed in commit cf41f4a527. We still want the keynav behavior it provided, so add similar code to overview's control manager. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4056 Part-of: --- js/ui/overviewControls.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js index 7a77b3250..2344ad8eb 100644 --- a/js/ui/overviewControls.js +++ b/js/ui/overviewControls.js @@ -435,6 +435,41 @@ class ControlsManager extends St.Widget { Main.overview.toggle(); }); + // connect_after to give search controller first dibs on the event + global.stage.connect_after('key-press-event', (actor, event) => { + if (this._searchController.searchActive) + return Clutter.EVENT_PROPAGATE; + + if (global.stage.key_focus && + !this.contains(global.stage.key_focus)) + return Clutter.EVENT_PROPAGATE; + + const { finalState } = + this._stateAdjustment.getStateTransitionParams(); + let keynavDisplay; + + if (finalState === ControlsState.WINDOW_PICKER) + keynavDisplay = this._workspacesDisplay; + else if (finalState === ControlsState.APP_GRID) + keynavDisplay = this._appDisplay; + + if (!keynavDisplay) + return Clutter.EVENT_PROPAGATE; + + const symbol = event.get_key_symbol(); + if (symbol === Clutter.KEY_Tab || symbol === Clutter.KEY_Down) { + keynavDisplay.navigate_focus( + null, St.DirectionType.TAB_FORWARD, false); + return Clutter.EVENT_STOP; + } else if (symbol === Clutter.KEY_ISO_Left_Tab) { + keynavDisplay.navigate_focus( + null, St.DirectionType.TAB_BACKWARD, false); + return Clutter.EVENT_STOP; + } + + return Clutter.EVENT_PROPAGATE; + }); + Main.wm.addKeybinding( 'toggle-application-view', new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }),