diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in index acf6adeb5..92a239f25 100644 --- a/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in @@ -64,6 +64,7 @@ value here is from the GsmPresenceStatus enumeration. + @@ -78,6 +79,17 @@ value here is from the GsmPresenceStatus enumeration. + + + ["<Super>F10"] + <_summary>Keybinding to open the application menu + <_description> + Keybinding to open the application menu. + + + + diff --git a/js/ui/panel.js b/js/ui/panel.js index ef240a5e0..329f118fc 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -4,6 +4,7 @@ const Cairo = imports.cairo; const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; +const Gtk = imports.gi.Gtk; const Lang = imports.lang; const Mainloop = imports.mainloop; const Meta = imports.gi.Meta; @@ -1112,6 +1113,15 @@ const Panel = new Lang.Class({ return true; }, + openAppMenu: function() { + let menu = this._appMenu.menu; + if (Main.overview.visible || menu.isOpen) + return; + + menu.open(); + menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); + }, + startStatusArea: function() { for (let i = 0; i < this._status_area_order.length; i++) { let role = this._status_area_order[i]; diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 69f8e194f..1e2b2f447 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -13,6 +13,7 @@ const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup; const Main = imports.ui.main; const Tweener = imports.ui.tweener; +const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; const WINDOW_ANIMATION_TIME = 0.25; const DIM_TIME = 0.500; const UNDIM_TIME = 0.250; @@ -134,6 +135,10 @@ const WindowManager = new Lang.Class({ Lang.bind(this, this._startAppSwitcher)); Meta.keybindings_set_custom_handler('switch-panels', Lang.bind(this, this._startA11ySwitcher)); + global.display.add_keybinding('open-application-menu', + SHELL_KEYBINDINGS_SCHEMA, + Meta.KeyBindingFlags.NONE, + Lang.bind(this, this._openAppMenu)); Main.overview.connect('showing', Lang.bind(this, function() { for (let i = 0; i < this._dimmedWindows.length; i++) @@ -547,6 +552,10 @@ const WindowManager = new Lang.Class({ Main.ctrlAltTabManager.popup(backwards, binding.get_mask()); }, + _openAppMenu : function(display, screen, window, event, binding) { + Main.panel.openAppMenu(); + }, + _showWorkspaceSwitcher : function(display, screen, window, binding) { if (screen.n_workspaces == 1) return;