From 4de15b2b57b9e805c038a9d4fb1ebf99317f3279 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Thu, 30 Dec 2010 15:22:54 +0100 Subject: [PATCH] PopupMenuManager: only navigate visible menus When doing keyboard navigation, ignore menus whose sourceActor is hidden. This is needed to hide status icons, as otherwise the menu would appear despite having no icon. https://bugzilla.gnome.org/show_bug.cgi?id=638306 --- js/ui/popupMenu.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index 91b412c03..30f353eb3 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -1194,6 +1194,18 @@ PopupMenuManager.prototype = { return -1; }, + _nextMenu: function(pos, direction) { + for (let i = 1; i < this._menus.length; i++) { + let candidate = mod(pos + i * direction, this._menus.length); + let menu = this._menus[candidate].menu; + if (!menu.sourceActor || menu.sourceActor.visible) + return menu; + } + // no menu is found? this should not happen + // anyway stay on current menu + return this._menus[pos]; + }, + _onEventCapture: function(actor, event) { if (!this.grabbed) return false; @@ -1232,7 +1244,7 @@ PopupMenuManager.prototype = { if (symbol == Clutter.Left || symbol == Clutter.Right) { let direction = symbol == Clutter.Right ? 1 : -1; let pos = this._findMenu(this._activeMenu); - let next = this._menus[mod(pos + direction, this._menus.length)].menu; + let next = this._nextMenu(pos, direction); if (next != this._activeMenu) { this._changeMenu(next); next.activateFirst();