diff options
author | Florian Müllner <fmuellner@gnome.org> | 2021-07-08 19:10:05 +0200 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2021-07-13 12:38:51 +0000 |
commit | 1f4eea12a53e2ee126e1eca58dfb6e875ae3b72e (patch) | |
tree | 3c2c164c5c539242c7f88e0e47ff85012243089e | |
parent | 850d2a33a88badabf5375d32595f31a386f9aa91 (diff) | |
download | gnome-shell-1f4eea12a53e2ee126e1eca58dfb6e875ae3b72e.tar.gz |
messageTray: Always remove destroyed banners
Currently we only mark the banner as removed if it is destroyed
while in SHOWN or SHOWING state, but not if we're already HIDING
(for example in response to `NotificationBanner::done-displaying`).
If this happens, we'll try to destroy the notification again at
the end of the transition, which leads to (harmless but annoying)
log spam since Notifications were turned into GObjects (that are
disposed when destroyed).
Address this by always marking destroyed banners as removed, while
still only triggering a state update while shown (or in the process
of being shown).
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4457
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1908>
-rw-r--r-- | js/ui/messageTray.js | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index b793f8a16..654bada6b 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1022,17 +1022,20 @@ var MessageTray = GObject.registerClass({ } _onNotificationDestroy(notification) { - if (this._notification == notification && (this._notificationState == State.SHOWN || this._notificationState == State.SHOWING)) { - this._updateNotificationTimeout(0); - this._notificationRemoved = true; - this._updateState(); - return; - } + this._notificationRemoved = this._notification === notification; - let index = this._notificationQueue.indexOf(notification); - if (index != -1) { - this._notificationQueue.splice(index, 1); - this.emit('queue-changed'); + if (this._notificationRemoved) { + if (this._notificationState === State.SHOWN || + this._notificationState === State.SHOWING) { + this._updateNotificationTimeout(0); + this._updateState(); + } + } else { + const index = this._notificationQueue.indexOf(notification); + if (index !== -1) { + this._notificationQueue.splice(index, 1); + this.emit('queue-changed'); + } } } |