From d3f2d07cf9db5959fa6bc57f099ecb62e5678a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20J=C3=B8rgen=20Br=C3=B8nner?= Date: Wed, 4 Jul 2018 15:33:43 +0200 Subject: [PATCH] Move keybinding bookkeeping out of extension.js --- extension.js | 101 +++---------------------------------------------- keybindings.js | 97 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 97 deletions(-) diff --git a/extension.js b/extension.js index d8eefb9..bec6af8 100644 --- a/extension.js +++ b/extension.js @@ -6,7 +6,8 @@ var modules = [ Extension.imports.liveAltTab, Extension.imports.utils, Extension.imports.stackoverlay, Extension.imports.app, Extension.imports.kludges, Extension.imports.topbar, - Extension.imports.navigator, Extension.imports.settings + Extension.imports.navigator, Extension.imports.settings, + Extension.imports.keybindings, ]; var [ Tiling, Scratch, LiveAltTab, utils, StackOverlay, @@ -36,7 +37,9 @@ window.PaperWM = Extension; var wmSettings; var shellSettings; var paperSettings; -var paperActions; + +var paperActions = Extension.imports.keybindings.paperActions; + function init() { SESSIONID += "#"; log(`init: ${SESSIONID}`); @@ -55,63 +58,6 @@ function init() { shellSettings = new Gio.Settings({ schema_id: "org.gnome.shell.keybindings"}); paperSettings = convenience.getSettings(); - /* - Keep track of some mappings mutter doesn't do/expose - - action-name -> action-id mapping - - action-id -> action mapping - - action -> handler - */ - paperActions = { - actions: [], - nameMap: {}, - unregisterSchemaless(actionId) { - const i = this.actions.findIndex(a => a.id === actionId); - if (i < 0) { - log("Tried to remove un registered action", actionId); - return; - } - delete this.nameMap[this.actions[i].name]; - this.actions.splice(i, 1); - }, - registerSchemaless(actionId, actionName, handler) { - let action = { - id: actionId, name: actionName, handler - } - this.actions.push(action); - this.nameMap[actionName] = action; - }, - register: function(actionName, handler, metaKeyBindingFlags) { - let id = registerMutterAction(actionName, - handler, - metaKeyBindingFlags); - // If the id is NONE the action is already registered - if (id === Meta.KeyBindingAction.NONE) - return null; - - let action = { id: id - , name: actionName - , handler: handler - }; - this.actions.push(action); - this.nameMap[actionName] = action; - return action; - }, - idOf: function(name) { - let action = this.byName(name); - if (action) { - return action.id; - } else { - return Meta.KeyBindingAction.NONE; - } - }, - byName: function(name) { - return this.nameMap[name]; - }, - byId: function(mutterId) { - return this.actions.find(action => action.id == mutterId); - } - }; - let dynamic_function_ref = utils.dynamic_function_ref; let as_key_handler = utils.as_key_handler; @@ -311,43 +257,6 @@ function disable() { enabled = false; } -/** - * Register a key-bindable action (from our own schema) in mutter. - * - * Return the assigned numeric id. - * - * NB: use `Meta.keybindings_set_custom_handler` to re-assign the handler. - */ -function registerMutterAction(action_name, handler, flags) { - // Ripped from https://github.com/negesti/gnome-shell-extensions-negesti - // Handles multiple gnome-shell versions - flags = flags || Meta.KeyBindingFlags.NONE; - - let settings = convenience.getSettings('org.gnome.Shell.Extensions.PaperWM.Keybindings') - - if (Main.wm.addKeybinding && Shell.ActionMode){ // introduced in 3.16 - return Main.wm.addKeybinding(action_name, - settings, flags, - Shell.ActionMode.NORMAL, - handler - ); - } else if (Main.wm.addKeybinding && Shell.KeyBindingMode) { // introduced in 3.7.5 - // Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.MESSAGE_TRAY, - return Main.wm.addKeybinding(action_name, - settings, flags, - Shell.KeyBindingMode.NORMAL, - handler - ); - } else { - return global.display.add_keybinding( - action_name, - settings, - flags, - handler - ); - } -} - function getConfigDir() { return Gio.file_new_for_path(GLib.getenv('HOME') + '/.config/paperwm'); diff --git a/keybindings.js b/keybindings.js index 478e6e9..fdc31d4 100644 --- a/keybindings.js +++ b/keybindings.js @@ -8,10 +8,105 @@ var Utils = Extension.imports.utils; var Main = imports.ui.main; var Shell = imports.gi.Shell; +var convenience = Extension.imports.convenience; var signals = new Utils.Signals(); var Navigator = Extension.imports.navigator; -var paperActions = Extension.imports.extension.paperActions; + +/* + Keep track of some mappings mutter doesn't do/expose + - action-name -> action-id mapping + - action-id -> action mapping + - action -> handler +*/ +var paperActions = { + actions: [], + nameMap: {}, + unregisterSchemaless(actionId) { + const i = this.actions.findIndex(a => a.id === actionId); + if (i < 0) { + log("Tried to remove un registered action", actionId); + return; + } + delete this.nameMap[this.actions[i].name]; + this.actions.splice(i, 1); + }, + registerSchemaless(actionId, actionName, handler) { + let action = { + id: actionId, name: actionName, handler + } + this.actions.push(action); + this.nameMap[actionName] = action; + }, + register: function(actionName, handler, metaKeyBindingFlags) { + let id = registerMutterAction(actionName, + handler, + metaKeyBindingFlags); + // If the id is NONE the action is already registered + if (id === Meta.KeyBindingAction.NONE) + return null; + + let action = { id: id + , name: actionName + , handler: handler + }; + this.actions.push(action); + this.nameMap[actionName] = action; + return action; + }, + idOf: function(name) { + let action = this.byName(name); + if (action) { + return action.id; + } else { + return Meta.KeyBindingAction.NONE; + } + }, + byName: function(name) { + return this.nameMap[name]; + }, + byId: function(mutterId) { + return this.actions.find(action => action.id == mutterId); + } +}; + +/** + * Register a key-bindable action (from our own schema) in mutter. + * + * Return the assigned numeric id. + * + * NB: use `Meta.keybindings_set_custom_handler` to re-assign the handler. + */ +function registerMutterAction(action_name, handler, flags) { + // Ripped from https://github.com/negesti/gnome-shell-extensions-negesti + // Handles multiple gnome-shell versions + flags = flags || Meta.KeyBindingFlags.NONE; + + let settings = convenience.getSettings('org.gnome.Shell.Extensions.PaperWM.Keybindings') + + if (Main.wm.addKeybinding && Shell.ActionMode){ // introduced in 3.16 + return Main.wm.addKeybinding(action_name, + settings, flags, + Shell.ActionMode.NORMAL, + handler + ); + } else if (Main.wm.addKeybinding && Shell.KeyBindingMode) { // introduced in 3.7.5 + // Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.MESSAGE_TRAY, + return Main.wm.addKeybinding(action_name, + settings, flags, + Shell.KeyBindingMode.NORMAL, + handler + ); + } else { + return global.display.add_keybinding( + action_name, + settings, + flags, + handler + ); + } +} + var actionIdMap = {}; // actionID -> handler var keycomboMap = {}