From d43ddec7b2da572dddc39d372e9a5e13bc80af0e Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Sun, 17 Mar 2019 00:08:07 -0400 Subject: [PATCH] Disable gnome-shell application hotkeys on 3.32 --- extension.js | 28 ++++++++++++++-------------- overview.js | 47 ++++++++++++++++++++++++----------------------- panelManager.js | 6 ++---- prefs.js | 2 +- utils.js | 30 ++++++++++++++++++++++++++---- 5 files changed, 67 insertions(+), 46 deletions(-) diff --git a/extension.js b/extension.js index 7c2a014..236bdaf 100644 --- a/extension.js +++ b/extension.js @@ -21,6 +21,7 @@ const Me = imports.misc.extensionUtils.getCurrentExtension(); const Convenience = Me.imports.convenience; const PanelManager = Me.imports.panelManager; +const Utils = Me.imports.utils; const Main = imports.ui.main; const Meta = imports.gi.Meta; @@ -43,7 +44,7 @@ let extensionChangedHandler; let disabledUbuntuDock; function init() { - Convenience.initTranslations(Me.imports.utils.TRANSLATION_DOMAIN); + Convenience.initTranslations(Utils.TRANSLATION_DOMAIN); } function enable() { @@ -80,18 +81,17 @@ function _enable() { panelManager = new PanelManager.dtpPanelManager(settings); panelManager.enable(); - Main.wm.removeKeybinding('open-application-menu'); - Main.wm.addKeybinding('open-application-menu', + Utils.removeKeybinding('open-application-menu'); + Utils.addKeybinding( + 'open-application-menu', new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }), - Meta.KeyBindingFlags.NONE, - Shell.ActionMode.NORMAL | - Shell.ActionMode.POPUP, Lang.bind(this, function() { if(settings.get_boolean('show-appmenu')) Main.wm._toggleAppMenu(); else panelManager.primaryPanel.taskbar.popupFocusedAppSecondaryMenu(); - }) + }), + Shell.ActionMode.NORMAL | Shell.ActionMode.POPUP ); // Pretend I'm the dash: meant to make appgrd swarm animation come from the @@ -109,13 +109,13 @@ function disable(reset) { oldDash = null; panelManager = null; - Main.wm.removeKeybinding('open-application-menu'); - Main.wm.addKeybinding('open-application-menu', - new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }), - Meta.KeyBindingFlags.NONE, - Shell.ActionMode.NORMAL | - Shell.ActionMode.POPUP, - Lang.bind(Main.wm, Main.wm._toggleAppMenu)); + Utils.removeKeybinding('open-application-menu'); + Utils.addKeybinding( + 'open-application-menu', + new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }), + Lang.bind(Main.wm, Main.wm._toggleAppMenu), + Shell.ActionMode.NORMAL | Shell.ActionMode.POPUP, + ); if (!reset) { ExtensionSystem.disconnect(extensionChangedHandler); diff --git a/overview.js b/overview.js index 971ff96..d45b85f 100644 --- a/overview.js +++ b/overview.js @@ -30,10 +30,13 @@ const Main = imports.ui.main; const Shell = imports.gi.Shell; const Gtk = imports.gi.Gtk; const Gdk = imports.gi.Gdk; +const Gio = imports.gi.Gio; const Mainloop = imports.mainloop; const Meta = imports.gi.Meta; +const GS_HOTKEYS_KEY = 'switch-to-application-'; + var dtpOverview = Utils.defineClass({ Name: 'DashToPanel.Overview', @@ -172,6 +175,8 @@ var dtpOverview = Utils.defineClass({ seenApps[appIcon.app] = (seenApps[appIcon.app] || 0) + 1; }); + this._showOverlay(); + if (appIndex < apps.length) { let appIcon = apps[appIndex]; let windowCount = !appIcon.window ? appIcon._nWindows : seenApps[appIcon.app]; @@ -247,6 +252,13 @@ var dtpOverview = Utils.defineClass({ if (this._hotKeysEnabled) return; + //3.32 introduced app hotkeys, disable them to prevent conflicts + if (Main.wm._switchToApplication) { + for (let i = 1; i < 10; ++i) { + Utils.removeKeybinding(GS_HOTKEYS_KEY + i); + } + } + // Setup keyboard bindings for taskbar elements let keys = ['app-hotkey-', 'app-shift-hotkey-', 'app-ctrl-hotkey-', // Regular numbers 'app-hotkey-kp-', 'app-shift-hotkey-kp-', 'app-ctrl-hotkey-kp-']; // Key-pad numbers @@ -254,15 +266,7 @@ var dtpOverview = Utils.defineClass({ for (let i = 0; i < this._numHotkeys; i++) { let appNum = i; - if (!Main.wm._allowedKeybindings[key + (i + 1)]) { - Main.wm.addKeybinding(key + (i + 1), this._dtpSettings, - Meta.KeyBindingFlags.NONE, - Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, - Lang.bind(this, function() { - this._activateApp(appNum); - this._showOverlay(); - })); - } + Utils.addKeybinding(key + (i + 1), this._dtpSettings, () => this._activateApp(appNum)); } }, this); @@ -280,11 +284,17 @@ var dtpOverview = Utils.defineClass({ 'app-hotkey-kp-', 'app-shift-hotkey-kp-', 'app-ctrl-hotkey-kp-']; // Key-pad numbers keys.forEach( function(key) { for (let i = 0; i < this._numHotkeys; i++) { - if (Main.wm._allowedKeybindings[key + (i + 1)]) { - Main.wm.removeKeybinding(key + (i + 1)); - } + Utils.removeKeybinding(key + (i + 1)); } }, this); + + if (Main.wm._switchToApplication) { + let gsSettings = new Gio.Settings({ schema_id: imports.ui.windowManager.SHELL_KEYBINDINGS_SCHEMA }); + + for (let i = 1; i < 10; ++i) { + Utils.addKeybinding(GS_HOTKEYS_KEY + i, gsSettings, Main.wm._switchToApplication.bind(Main.wm)); + } + } this._hotKeysEnabled = false; @@ -320,20 +330,11 @@ var dtpOverview = Utils.defineClass({ }, _enableExtraShortcut: function() { - if (!Main.wm._allowedKeybindings['shortcut']) { - Main.wm.addKeybinding('shortcut', this._dtpSettings, - Meta.KeyBindingFlags.NONE, - Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, - Lang.bind(this, function() { - this._showOverlay(true); - })); - } + Utils.addKeybinding('shortcut', this._dtpSettings, () => this._showOverlay(true)); }, _disableExtraShortcut: function() { - if (Main.wm._allowedKeybindings['shortcut']) { - Main.wm.removeKeybinding('shortcut'); - } + Utils.removeKeybinding('shortcut'); }, _showOverlay: function(overlayFromShortcut) { diff --git a/panelManager.js b/panelManager.js index 889286f..5b701cb 100755 --- a/panelManager.js +++ b/panelManager.js @@ -331,12 +331,10 @@ var dtpPanelManager = Utils.defineClass({ }; Object.keys(keys).forEach(k => { - if (Main.wm._allowedKeybindings[k]) { - Main.wm.removeKeybinding(k); - } + Utils.removeKeybinding(k); if (enable) { - Main.wm.addKeybinding(k, this._dtpSettings, Meta.KeyBindingFlags.NONE, Shell.ActionMode.NORMAL, keys[k]); + Utils.addKeybinding(k, this._dtpSettings, keys[k], Shell.ActionMode.NORMAL); } }); }, diff --git a/prefs.js b/prefs.js index 6bd7676..160934e 100644 --- a/prefs.js +++ b/prefs.js @@ -31,7 +31,7 @@ const Mainloop = imports.mainloop; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Convenience = Me.imports.convenience; -const Gettext = imports.gettext.domain(Me.imports.utils.TRANSLATION_DOMAIN); +const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']); const _ = Gettext.gettext; const N_ = function(e) { return e }; diff --git a/utils.js b/utils.js index 6749fcb..5686d9b 100644 --- a/utils.js +++ b/utils.js @@ -22,8 +22,12 @@ */ const Gi = imports._gi; +const GObject = imports.gi.GObject; +const Meta = imports.gi.Meta; +const Shell = imports.gi.Shell; const Lang = imports.lang; const Mainloop = imports.mainloop; +const Main = imports.ui.main; let es6Support = imports.misc.config.PACKAGE_VERSION >= '3.31.9'; @@ -42,10 +46,10 @@ var defineClass = function (classDef) { }; } - return new imports.lang.Class(classDef); + return new Lang.Class(classDef); } - let isGObject = parentProto instanceof imports.gi.GObject.Object; + let isGObject = parentProto instanceof GObject.Object; let needsSuper = es6Support && parentProto && !isGObject; let getParentArgs = function(args) { let parentArgs = []; @@ -88,7 +92,7 @@ var defineClass = function (classDef) { .forEach(k => C.prototype[k] = classDef[k]); if (isGObject) { - C = imports.gi.GObject.registerClass(C); + C = GObject.registerClass(C); } return C; @@ -261,7 +265,7 @@ var DisplayWrapper = { }, getMonitorManager: function() { - return global.screen || imports.gi.Meta.MonitorManager.get(); + return global.screen || Meta.MonitorManager.get(); } }; @@ -273,3 +277,21 @@ var hookVfunc = function(proto, symbol, func) { Gi.hook_up_vfunc(proto, symbol, func); } }; + +var addKeybinding = function(key, settings, handler, modes) { + if (!Main.wm._allowedKeybindings[key]) { + Main.wm.addKeybinding( + key, + settings, + Meta.KeyBindingFlags.NONE, + modes || (Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW), + handler + ); + } +}; + +var removeKeybinding = function(key) { + if (Main.wm._allowedKeybindings[key]) { + Main.wm.removeKeybinding(key); + } +}; \ No newline at end of file