summaryrefslogtreecommitdiff
path: root/0001-window-list-Explicitly-dispose-settings-on-destroy.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-window-list-Explicitly-dispose-settings-on-destroy.patch')
-rw-r--r--0001-window-list-Explicitly-dispose-settings-on-destroy.patch46
1 files changed, 46 insertions, 0 deletions
diff --git a/0001-window-list-Explicitly-dispose-settings-on-destroy.patch b/0001-window-list-Explicitly-dispose-settings-on-destroy.patch
new file mode 100644
index 0000000..9556d59
--- /dev/null
+++ b/0001-window-list-Explicitly-dispose-settings-on-destroy.patch
@@ -0,0 +1,46 @@
+From a31f4b6ca703faab25c306dc33056763642a83cb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Fri, 30 Sep 2022 18:16:16 +0200
+Subject: [PATCH] window-list: Explicitly dispose settings on destroy
+
+This will not only disconnect the signal handler, but also remove
+any bindings. This works around a crash that happens if a setting
+that triggers the binding changes at the same time as a setting
+that rebuilds the window list; in that case, the binding handler
+runs after gjs has dropped its wrapper object, but before the
+binding is removed automaticalled when the object is finalized.
+
+https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/416
+
+Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/243>
+---
+ extensions/window-list/extension.js | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js
+index 89413818..91ee3e6b 100644
+--- a/extensions/window-list/extension.js
++++ b/extensions/window-list/extension.js
+@@ -842,8 +842,8 @@ class WindowList extends St.Widget {
+ this._dndWindow = null;
+
+ this._settings = ExtensionUtils.getSettings();
+- this._groupingModeChangedId = this._settings.connect(
+- 'changed::grouping-mode', this._groupingModeChanged.bind(this));
++ this._settings.connect('changed::grouping-mode',
++ () => this._groupingModeChanged());
+ this._grouped = undefined;
+ this._groupingModeChanged();
+ }
+@@ -1112,7 +1112,7 @@ class WindowList extends St.Widget {
+ Main.xdndHandler.disconnect(this._dragBeginId);
+ Main.xdndHandler.disconnect(this._dragEndId);
+
+- this._settings.disconnect(this._groupingModeChangedId);
++ this._settings.run_dispose();
+
+ let windows = global.get_window_actors();
+ for (let i = 0; i < windows.length; i++)
+--
+2.39.1
+