From 95c903aa40075e28d611e036c76c6db961810966 Mon Sep 17 00:00:00 2001 From: Meet Parikh Date: Thu, 23 Apr 2015 22:13:58 +0530 Subject: [PATCH] panel: Block banners when opening menus that would overlap We currently block banners while the time+date menu is open, as it would obscure the notification. However it is not necessarily the only menu for which this is the case, so generalize the behavior to all menus that would overlap banners when open. https://bugzilla.gnome.org/show_bug.cgi?id=745910 --- js/ui/dateMenu.js | 2 -- js/ui/panel.js | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js index 7307d7d8f..12d7eea15 100644 --- a/js/ui/dateMenu.js +++ b/js/ui/dateMenu.js @@ -357,8 +357,6 @@ const DateMenuButton = new Lang.Class({ this._date.setDate(now); this._messageList.setDate(now); } - // Block notification banners while the menu is open - Main.messageTray.bannerBlocked = isOpen; })); // Fill up the first column diff --git a/js/ui/panel.js b/js/ui/panel.js index 2a951368f..46be6acca 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -1003,6 +1003,25 @@ const Panel = new Lang.Class({ if (parent) parent.remove_actor(container); + if (indicator._openChangedId > 0) + indicator.menu.disconnect(indicator._openChangedId); + indicator._openChangedId = 0; + + if (indicator.menu) + indicator._openChangedId = indicator.menu.connect('open-state-changed', + Lang.bind(this, function(menu, isOpen) { + let boxAlignment; + if (box == this._leftBox) + boxAlignment = Clutter.ActorAlign.START; + else if (box == this._centerBox) + boxAlignment = Clutter.ActorAlign.CENTER; + else if (box == this._rightBox) + boxAlignment = Clutter.ActorAlign.END; + + if (boxAlignment == Main.messageTray.bannerAlignment) + Main.messageTray.bannerBlocked = isOpen; + })); + box.insert_child_at_index(container, position); if (indicator.menu) this.menuManager.addMenu(indicator.menu);