messageTray: Re-enable unredirection when banner is destroyed

The intention of commit 4dc20398 was to disable unredirection while
banners are shown, but the ::done-displaying signal currently used for
re-enabling unredirection is only emitted under some circumstances, so
it's possible that unredirection is left disabled indefinitely, whoops.

Fix this by tying disabling unredirection explicitly to the lifetime
of the banner actor.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/799

(cherry picked from commit e5ce3d541e)
This commit is contained in:
Florian Müllner 2018-11-22 18:18:34 +01:00 committed by Marco Trevisan (Treviño)
parent 8111286463
commit 5e7a7e31a1

View File

@ -1307,10 +1307,8 @@ var MessageTray = new Lang.Class({
} }
this._banner = this._notification.createBanner(); this._banner = this._notification.createBanner();
this._bannerClickedId = this._banner.connect('done-displaying', () => { this._bannerClickedId = this._banner.connect('done-displaying',
Meta.enable_unredirect_for_display(global.display); this._escapeTray.bind(this));
this._escapeTray();
});
this._bannerUnfocusedId = this._banner.connect('unfocused', () => { this._bannerUnfocusedId = this._banner.connect('unfocused', () => {
this._updateState(); this._updateState();
}); });
@ -1460,6 +1458,7 @@ var MessageTray = new Lang.Class({
this._pointerInNotification = false; this._pointerInNotification = false;
this._notificationRemoved = false; this._notificationRemoved = false;
Meta.enable_unredirect_for_display(global.display);
this._banner.actor.destroy(); this._banner.actor.destroy();
this._banner = null; this._banner = null;