From 7a8cd409366d5f41006875b656400cffec8049a5 Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Tue, 11 Feb 2020 13:32:16 -0500 Subject: [PATCH] Add showapps context menu to empty panel space --- appIcons.js | 12 ++++++++---- panel.js | 13 +++++++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/appIcons.js b/appIcons.js index 2dda4d8..560a91c 100644 --- a/appIcons.js +++ b/appIcons.js @@ -1660,6 +1660,7 @@ var ShowAppsIconWrapper = Utils.defineClass({ }, _onMenuPoppedDown: function() { + this._menu.sourceActor = this.actor; this.actor.sync_hover(); this.emit('menu-state-changed', false); }, @@ -1672,10 +1673,7 @@ var ShowAppsIconWrapper = Utils.defineClass({ this.actor.set_style('padding:' + (padding + (isVertical ? sidePadding : 0)) + 'px ' + (padding + (isVertical ? 0 : sidePadding)) + 'px;'); }, - popupMenu: function() { - this._removeMenuTimeout(); - this.actor.fake_release(); - + createMenu: function() { if (!this._menu) { this._menu = new MyShowAppsIconMenu(this.actor); this._menu.connect('open-state-changed', Lang.bind(this, function(menu, isPoppedUp) { @@ -1690,6 +1688,12 @@ var ShowAppsIconWrapper = Utils.defineClass({ }); this._menuManager.addMenu(this._menu); } + }, + + popupMenu: function() { + this._removeMenuTimeout(); + this.actor.fake_release(); + this.createMenu(this.actor); //this.emit('menu-state-changed', true); diff --git a/panel.js b/panel.js index cb5bc1f..0a451df 100644 --- a/panel.js +++ b/panel.js @@ -796,14 +796,23 @@ var dtpPanel = Utils.defineClass({ let type = event.type(); let isPress = type == Clutter.EventType.BUTTON_PRESS; let button = isPress ? event.get_button() : -1; + let [stageX, stageY] = event.get_coords(); - if (Main.modalCount > 0 || event.get_source() != actor || + if (button == 3 && global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, stageX, stageY) == this.panel.actor) { + //right click on an empty part of the panel, temporarily borrow and display the showapps context menu + Main.layoutManager.setDummyCursorGeometry(stageX, stageY, 0, 0); + + this.taskbar._showAppsIconWrapper.createMenu(); + this.taskbar._showAppsIconWrapper._menu.sourceActor = Main.layoutManager.dummyCursor; + this.taskbar._showAppsIconWrapper.popupMenu(); + + return Clutter.EVENT_STOP; + } else if (Main.modalCount > 0 || event.get_source() != actor || (!isPress && type != Clutter.EventType.TOUCH_BEGIN) || (isPress && button != 1)) { return Clutter.EVENT_PROPAGATE; } - let [stageX, stageY] = event.get_coords(); let params = checkIfVertical() ? [stageY, 'y', 'height'] : [stageX, 'x', 'width']; let dragWindow = this._getDraggableWindowForPosition.apply(this, params.concat(['maximized_' + getOrientation() + 'ly']));