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)