From 92d5c112fb2076360fb8f125e19f6e77c19d1501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= Date: Sun, 29 Apr 2018 23:22:55 +0200 Subject: [PATCH] Use native mutter actions to override keybindings This means that we won't kill keybindings on disable (which could be worked around) or crashes (which would be much harder to work around). NB: it's necessary to go into dconf and restore `switch-applications[-backward]`, `switch-group[-backward]` to get the keybindings working again. --- extension.js | 47 ++++++++++++------ navigator.js | 10 ++++ schemas/gschemas.compiled | Bin 1800 -> 1736 bytes ....shell.extensions.org-scrollwm.gschema.xml | 8 +-- 4 files changed, 47 insertions(+), 18 deletions(-) diff --git a/extension.js b/extension.js index ef33fd3..a5fbb18 100644 --- a/extension.js +++ b/extension.js @@ -189,6 +189,10 @@ function restoreKeybindings() { } } +function setKeybinding(name, func) { + Main.wm.setCustomKeybindingHandler(name, Shell.ActionMode.NORMAL, func); +} + let nWorkspacesSignal; let workspaceRemovedSignal; let windowCreatedSignal; @@ -210,13 +214,21 @@ function enable() { settings.set_strv("maximize-horizontally", ['f']) settings.set_strv("toggle-fullscreen", ['f']); - // We want to use - killKeybinding('switch-applications', wmSettings); - killKeybinding('switch-applications-backward', wmSettings); - killKeybinding('switch-group', wmSettings); - killKeybinding('switch-group-backward', wmSettings); - // Super-n is used for new-window - killKeybinding('focus-active-notification', shellSettings); + setKeybinding('switch-applications', + utils.dynamic_function_ref('liveAltTab', + LiveAltTab)); + setKeybinding('switch-applications-backward', + utils.dynamic_function_ref('liveAltTab', + LiveAltTab)); + setKeybinding('switch-group', + utils.dynamic_function_ref("preview_navigate", + Navigator)); + setKeybinding('switch-group-backward', + utils.dynamic_function_ref("preview_navigate", + Navigator)); + + setKeybinding('focus-active-notification', // `N` + utils.as_key_handler('newWindow', App)); // Switched to 'escape' in 3.28 killKeybinding('restore-shortcuts', new Gio.Settings({ schema_id: "org.gnome.mutter.wayland.keybindings"})); @@ -234,15 +246,22 @@ function disable() { debug("disable", SESSIONID); // Disconnect focus and reset scale and pivot + setKeybinding('switch-applications', + Main.wm._startSwitcher.bind(Main.wm)); + setKeybinding('switch-applications-backward', + Main.wm._startSwitcher.bind(Main.wm)); + setKeybinding('switch-group', + Main.wm._startSwitcher.bind(Main.wm)); + setKeybinding('switch-group-backward', + Main.wm._startSwitcher.bind(Main.wm)); + + Main.wm.setCustomKeybindingHandler('focus-active-notification', + Shell.ActionMode.NORMAL | + Shell.ActionMode.OVERVIEW, + Main.messageTray._expandActiveNotification.bind(Main.messageTray)); + modules.forEach(m => m.disable && m.disable()); - // Restore default gnome bindings - // restoreKeybindings(wmSettings); - - // Kill our custom bindings - // killKeybinding('live-alt-tab', paperSettings) - // killKeybinding('live-alt-tab-backward', paperSettings) - enabled = false; } diff --git a/navigator.js b/navigator.js index c9e93f4..816a765 100644 --- a/navigator.js +++ b/navigator.js @@ -213,6 +213,16 @@ var PreviewedWindowNavigator = new Lang.Class({ _doAction: function(mutterActionId) { let paperActions = Extension.imports.extension.paperActions; + + switch (mutterActionId) { + case Meta.KeyBindingAction.SWITCH_GROUP: + mutterActionId = paperActions.idOf('previous-workspace'); + break; + case Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD: + mutterActionId = paperActions.idOf('previous-workspace-backward'); + break; + } + if (mutterActionId === paperActions.idOf("switch-next")) { this._select(this._next()); return true; diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index 4b7a1d5440229a0b45cfe0aa85a74917a59a18ed..00a134ca32c173b9e4fc1d6da8f5dd695d48a6e0 100644 GIT binary patch delta 341 zcmeC+JHfl*31j_K76yjm_b=2~85kHqY*B_Xh7CY^D-ge%w(&7Y9K_}Uik|?|*Ma!d z)tfIs;vlv(Q2YmwW(Nw?u&#~+iG$dDKye8mZ3M)9Y}c28#6fHYpm+q3o(sfZ92n}; zKoTGhCs1MqkbVWk>gwfS2Z7jJAPa!BEgJ*FyhFj$fJ`u32q+!^6pIJqN6#X`7K7O0 zK=BG7y$y(&LZ$0L>OpLfIR}9B2_P;@Eh@=OPR!BG-Ta7Y9pmIVEHV;6Wef}&iN%^F znK`MtWtqj9Nja%Np~-hxY(+UCGWqH0K)K@NqQsKq42I2atj>&#oRec&Wtf2KcCZBi E0PMa>DF6Tf delta 392 zcmX@X+rhWt31j_276yjm_b=2~85kHqY*B_Xh8;lq0uaBOw(&7Y9K_}Uia!9-?}7N# z)tfIs;vlv(P+S1Wu>j&4*41$!aS)piDDDBIlYqF7?fNp1IEbwP6z>4iXMy;O14Dfp zNCL#+1WMch(o$>;4C?CTUKzbn%KYA7kwiv_~ z2a4|i(%*oXDO9>1q#ncunZv-&z`y~-WvN9anaPPcy1APlF|A|du?a3MNG-ApNlaqk zo;-m?Mi?q!6P%HmRst3mn!JHUbn*!nOI=hs$E5tS)Oe6iPDKWd#A3~o{PgskRNdm_ cqQsKqjLl-K&WteQkkm>|)@7BMT)`Fq0AfyDv;Y7A diff --git a/schemas/org.gnome.shell.extensions.org-scrollwm.gschema.xml b/schemas/org.gnome.shell.extensions.org-scrollwm.gschema.xml index f030590..ef83e7b 100644 --- a/schemas/org.gnome.shell.extensions.org-scrollwm.gschema.xml +++ b/schemas/org.gnome.shell.extensions.org-scrollwm.gschema.xml @@ -23,20 +23,20 @@ - Tab']]]> + Switch to previously used window - Tab']]]> + Switch to previously used window, backward order - d', 'Above_Tab']]]> + d']]]> Switch to previously used workspace - u', 'Above_Tab']]]> + u']]]> Switch to the previously used workspace, backward order