gnome-shell/fix-stuck-cover-pane.patch
Florian Müllner 3ecde27071 Fix stuck cover pane
Resolves #2063156
2022-04-18 23:27:54 +02:00

125 lines
4.2 KiB
Diff

From e69da36095d5093c1c7bec7a9c96c079c0b837f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 13 Apr 2022 20:57:05 +0200
Subject: [PATCH 1/3] layout: Make sure startup animation completes
We currently complete the animation using an onComplete handler,
which only runs if the corresponding transition was stopped when
finished.
While it is unexpected that the transition is interrupted, it can
apparently happen under some circumstances (like VMs with qlx).
The consequences of that are pretty bad, mainly due to the cover
pane that prevents input during the animation not getting removed.
Address this by always completing the animation when the transition
is stopped, regardless of whether it completed or not.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5337
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2269>
---
js/ui/layout.js | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 0f279f86c..fe91ff186 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -740,14 +740,14 @@ var LayoutManager = GObject.registerClass({
translation_y: 0,
duration: STARTUP_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- onComplete: () => this._startupAnimationComplete(),
+ onStopped: () => this._startupAnimationComplete(),
});
}
_startupAnimationSession() {
- const onComplete = () => this._startupAnimationComplete();
+ const onStopped = () => this._startupAnimationComplete();
if (Main.sessionMode.hasOverview) {
- Main.overview.runStartupAnimation(onComplete);
+ Main.overview.runStartupAnimation(onStopped);
} else {
this.uiGroup.ease({
scale_x: 1,
@@ -755,7 +755,7 @@ var LayoutManager = GObject.registerClass({
opacity: 255,
duration: STARTUP_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- onComplete,
+ onStopped,
});
}
}
--
2.35.1
From dd28832dcdb7ef390cc444ec046cfafce56ebc81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 13 Apr 2022 20:14:47 +0200
Subject: [PATCH 2/3] background: Pass cancellable when querying file info
Otherwise it is possible that the operation completes successfully
after the background has been destroyed, which will throw a warning
(caused by accessing the this._fileWatches object after it has been
nulled).
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5337
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2268>
---
js/ui/background.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/ui/background.js b/js/ui/background.js
index 198194a50..825fee0d9 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -492,7 +492,7 @@ var Background = GObject.registerClass({
Gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
Gio.FileQueryInfoFlags.NONE,
0,
- null);
+ this._cancellable);
} catch (e) {
this._setLoaded();
return;
--
2.35.1
From ef74f922d65d38718b5d8cb13bc43f129947ffc0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 13 Apr 2022 20:51:55 +0200
Subject: [PATCH 3/3] background: Do not queue idle when cancelled
A cancelled cancellable means that the background was destroyed,
so we shouldn't queue an idle or emit the 'loaded' signal anymore.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5337
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2268>
---
js/ui/background.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/js/ui/background.js b/js/ui/background.js
index 825fee0d9..a68f23301 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -333,6 +333,8 @@ var Background = GObject.registerClass({
return;
this.isLoaded = true;
+ if (this._cancellable?.is_cancelled())
+ return;
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
this.emit('loaded');
--
2.35.1