From 3b8d53060d1b7146bde0854906a1a1285641a047 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 25 Sep 2009 16:45:21 -0400 Subject: [PATCH] Immediately pop up menu on right click We were actually showing a menu on button 3 before, but only through a chain of coincidences. This patch explicitly supports it and makes sure we show it immediately rather than after a timeout. Pass the activating button in so that we only pop down on that button. https://bugzilla.gnome.org/show_bug.cgi?id=596371 --- js/ui/appIcon.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/js/ui/appIcon.js b/js/ui/appIcon.js index e6d8ec8b8..7a9df6f7a 100644 --- a/js/ui/appIcon.js +++ b/js/ui/appIcon.js @@ -210,14 +210,19 @@ AppIcon.prototype = { }, _updateMenuOnButtonPress: function(actor, event) { - if (this._menuTimeoutId != 0) - Mainloop.source_remove(this._menuTimeoutId); - this._menuTimeoutId = Mainloop.timeout_add(APPICON_MENU_POPUP_TIMEOUT_MS, - Lang.bind(this, this.popupMenu)); + let button = event.get_button(); + if (button == 1) { + if (this._menuTimeoutId != 0) + Mainloop.source_remove(this._menuTimeoutId); + this._menuTimeoutId = Mainloop.timeout_add(APPICON_MENU_POPUP_TIMEOUT_MS, + Lang.bind(this, function () { this.popupMenu(button); })); + } else if (button == 3) { + this.popupMenu(button); + } return false; }, - popupMenu: function() { + popupMenu: function(activatingButton) { if (this._menuTimeoutId != 0) { Mainloop.source_remove(this._menuTimeoutId); this._menuTimeoutId = 0; @@ -241,7 +246,7 @@ AppIcon.prototype = { })); } - this._menu.popup(); + this._menu.popup(activatingButton); return false; }, @@ -476,13 +481,13 @@ AppIconMenu.prototype = { } }, - popup: function() { + popup: function(activatingButton) { let [stageX, stageY] = this._source.actor.get_transformed_position(); let [stageWidth, stageHeight] = this._source.actor.get_transformed_size(); this._redisplay(); - this._windowContainer.popup(0, Main.currentTime()); + this._windowContainer.popup(activatingButton, Main.currentTime()); this.emit('popup', true);