Package: gnome-shell
Version: 3.30.2-7
Severity: important
Tags: patch upstream fixed-upstream
Forwarded: https://gitlab.gnome.org/GNOME/gnome-shell/issues/799

https://gitlab.gnome.org/GNOME/gnome-shell/issues/799
> I've experienced a rather severe drop in performance after upgrading
> to gnome-shell 3.30.2-1 in Fedora 29.
...
> I think 62c2dbbc broke unredirection of fullscreen windows after a
> notification has been shown.

I believe this affects buster. Its practical effect is:

* Steps to reproduce: Do something that will provoke a notification later.
  Run a graphically-intensive fullscreen 3D game.
* Expected result: The game's performance drops while the notification is
  showing, but recovers afterwards.
* Actual result: The game's performance drops and does not recover.

I'm opening a bug for this because the change has been backported to the
upstream gnome-3-30 branch, and I think it's something we should consider
applying to buster.

    smcv
>From 51b04134db2cce3a5a8b9074d8705e4284f5088d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuell...@gnome.org>
Date: Thu, 22 Nov 2018 17:18:34 +0000
Subject: [PATCH] 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 e5ce3d541e48dd75c9218312cd74ecb760ab857a)
---
 js/ui/messageTray.js | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 20469afb3..99f0cf9e7 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1309,10 +1309,8 @@ var MessageTray = new Lang.Class({
         }
 
         this._banner = this._notification.createBanner();
-        this._bannerClickedId = this._banner.connect('done-displaying', () => {
-            Meta.enable_unredirect_for_display(global.display);
-            this._escapeTray();
-        });
+        this._bannerClickedId = this._banner.connect('done-displaying',
+                                                     this._escapeTray.bind(this));
         this._bannerUnfocusedId = this._banner.connect('unfocused', () => {
             this._updateState();
         });
@@ -1462,6 +1460,7 @@ var MessageTray = new Lang.Class({
 
         this._pointerInNotification = false;
         this._notificationRemoved = false;
+        Meta.enable_unredirect_for_display(global.display);
 
         this._banner.actor.destroy();
         this._banner = null;
-- 
2.20.1

Reply via email to