From 8032e672e933eb85b2f7224e7b5a6984723bda01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 13 Feb 2015 23:53:18 +0100 Subject: [PATCH] dateMenu: Block notification banners while the calendar is open The new banner position interferes with the calendar drop-down. Resolve this by blocking banners while the calendar is shown. https://bugzilla.gnome.org/show_bug.cgi?id=744850 --- js/ui/dateMenu.js | 4 +++- js/ui/messageTray.js | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js index 7e2cb5c2a..55b360b31 100644 --- a/js/ui/dateMenu.js +++ b/js/ui/dateMenu.js @@ -358,13 +358,15 @@ const DateMenuButton = new Lang.Class({ this._messageList.setDate(date); })); - // Whenever the menu is opened, select today this.menu.connect('open-state-changed', Lang.bind(this, function(menu, isOpen) { + // Whenever the menu is opened, select today if (isOpen) { let now = new Date(); this._calendar.setDate(now); this._date.setDate(now); } + // Block notification banners while the menu is open + Main.messageTray.bannerBlocked = isOpen; })); // Fill up the first column diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 2d1bf9f83..96fa917b8 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1365,6 +1365,7 @@ const MessageTray = new Lang.Class({ this._onStatusChanged(proxy.status); })); this._busy = false; + this._bannerBlocked = false; this._presence.connectSignal('StatusChanged', Lang.bind(this, function(proxy, senderName, [status]) { this._onStatusChanged(status); })); @@ -1478,6 +1479,13 @@ const MessageTray = new Lang.Class({ return this._notificationQueue.length; }, + set bannerBlocked(v) { + if (this._bannerBlocked == v) + return; + this._bannerBlocked = v; + this._updateState(); + }, + contains: function(source) { return this._sources.has(source); }, @@ -1688,6 +1696,10 @@ const MessageTray = new Lang.Class({ // _updateState() figures out what (if anything) needs to be done // at the present time. _updateState: function() { + this.actor.visible = !this._bannerBlocked; + if (this._bannerBlocked) + return; + // If our state changes caused _updateState to be called, // just exit now to prevent reentrancy issues. if (this._updatingState)