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>
This commit is contained in:
parent
850d2a33a8
commit
1f4eea12a5
@ -1022,19 +1022,22 @@ 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) {
|
||||
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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_onNotificationShow(_source, notification) {
|
||||
if (this._notification == notification) {
|
||||
|
Loading…
Reference in New Issue
Block a user