summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Müllner <fmuellner@gnome.org>2021-07-08 19:10:05 +0200
committerMarge Bot <marge-bot@gnome.org>2021-07-13 12:38:51 +0000
commit1f4eea12a53e2ee126e1eca58dfb6e875ae3b72e (patch)
tree3c2c164c5c539242c7f88e0e47ff85012243089e
parent850d2a33a88badabf5375d32595f31a386f9aa91 (diff)
downloadgnome-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.js23
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');
+ }
}
}