summaryrefslogtreecommitdiffstats
path: root/debian/patches/overview-Handle-unredirection-in-OverviewShown-state-mach.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/overview-Handle-unredirection-in-OverviewShown-state-mach.patch')
-rw-r--r--debian/patches/overview-Handle-unredirection-in-OverviewShown-state-mach.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/debian/patches/overview-Handle-unredirection-in-OverviewShown-state-mach.patch b/debian/patches/overview-Handle-unredirection-in-OverviewShown-state-mach.patch
new file mode 100644
index 0000000..fbd4061
--- /dev/null
+++ b/debian/patches/overview-Handle-unredirection-in-OverviewShown-state-mach.patch
@@ -0,0 +1,75 @@
+From: "robert.mader@collabora.com" <robert.mader@collabora.com>
+Date: Wed, 27 Sep 2023 01:10:45 +0200
+Subject: overview: Handle unredirection in OverviewShown state machine
+
+Under certain unknown circumstances currently not every
+`disable_unredirect_for_display()` gets matched with an
+`enable_unredirect_for_display()` when closing the overview.
+
+As we only want to not disable unredirection when hidden and we nowadays
+have a state machine that ensures we transition to and from one state to
+another only once, handle unredirection en-/disablement as part of the
+state transition.
+
+(cherry picked from commit a94fcee9616ef52d0f1d6453515a104d69c6cb92)
+
+Bug: https://gitlab.gnome.org/GNOME/mutter/-/issues/2994
+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2970
+Applied-upstream: 43.10, commit:3b921ba0cb28c38ff5b7faba2dfe446cbc845bb4
+---
+ js/ui/overview.js | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
+
+diff --git a/js/ui/overview.js b/js/ui/overview.js
+index 757a8e4..bf3ffca 100644
+--- a/js/ui/overview.js
++++ b/js/ui/overview.js
+@@ -296,6 +296,11 @@ var Overview = class extends Signals.EventEmitter {
+ `${this._shownState} to ${state}`);
+ }
+
++ if (this._shownState === OverviewShownState.HIDDEN)
++ Meta.disable_unredirect_for_display(global.display);
++ else if (state === OverviewShownState.HIDDEN)
++ Meta.enable_unredirect_for_display(global.display);
++
+ this._shownState = state;
+ this.emit(OVERVIEW_SHOWN_TRANSITIONS[state].signal);
+ }
+@@ -402,8 +407,6 @@ var Overview = class extends Signals.EventEmitter {
+
+ _gestureUpdate(tracker, progress) {
+ if (!this._shown) {
+- Meta.disable_unredirect_for_display(global.display);
+-
+ this._shown = true;
+ this._visible = true;
+ this._visibleTarget = true;
+@@ -559,8 +562,6 @@ var Overview = class extends Signals.EventEmitter {
+ this._visibleTarget = true;
+ this._activationTime = GLib.get_monotonic_time() / GLib.USEC_PER_SEC;
+
+- Meta.disable_unredirect_for_display(global.display);
+-
+ Main.layoutManager.overviewGroup.set_child_above_sibling(
+ this._coverPane, null);
+ this._coverPane.show();
+@@ -627,9 +628,6 @@ var Overview = class extends Signals.EventEmitter {
+ }
+
+ _hideDone() {
+- // Re-enable unredirection
+- Meta.enable_unredirect_for_display(global.display);
+-
+ this._coverPane.hide();
+
+ this._visible = false;
+@@ -679,8 +677,6 @@ var Overview = class extends Signals.EventEmitter {
+ // the animation because of a race in the xserver where the grab
+ // fails when requested very early during startup.
+
+- Meta.disable_unredirect_for_display(global.display);
+-
+ this._changeShownState(OverviewShownState.SHOWING);
+
+ this._overview.runStartupAnimation(() => {