From 1297d8dc30ea2f62b0849266d84d1749a599ee28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 28 Oct 2021 19:27:57 +0200 Subject: [PATCH] dbusServices/extensions: Fix shutdown after showing prefs GTK4 relies entirely on refcounting for cleanup (that is, there is no longer a destroy() method that forces a dispose run regardless of the refcount). Unfortunately that makes cleanup harder in (some) language bindings, where an object may be kept alive implicitly by closures etc. Address this by releasing the hold count when the window is closed rather than when it is destroyed. This isn't the most elegant, but it ensure that the service doesn't get stuck if an extension doesn't carefully clean up everything in its prefs widget. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4564 Part-of: (cherry picked from commit 4d2b008966266ed96325dfd2cf7ebe41902aa270) --- js/dbusServices/extensions/extensionsService.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/js/dbusServices/extensions/extensionsService.js b/js/dbusServices/extensions/extensionsService.js index 6556d3cf3..7fa32fe80 100644 --- a/js/dbusServices/extensions/extensionsService.js +++ b/js/dbusServices/extensions/extensionsService.js @@ -133,7 +133,10 @@ var ExtensionsService = class extends ServiceImplementation { if (options.modal) window.modal = options.modal.get_boolean(); - window.connect('destroy', () => this.release()); + window.connect('close-request', () => { + this.release(); + return false; + }); this.hold(); window.show();