From ea53f9dbca493d1269660c657eba46b05c2bd738 Mon Sep 17 00:00:00 2001 From: Romain Vigier Date: Sun, 30 Oct 2022 13:02:09 +0100 Subject: [PATCH] Theme switcher: Disconnect from extension manager --- src/modules/SwitcherTheme.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/modules/SwitcherTheme.js b/src/modules/SwitcherTheme.js index eb230b0..582825d 100644 --- a/src/modules/SwitcherTheme.js +++ b/src/modules/SwitcherTheme.js @@ -74,6 +74,8 @@ var SwitcherTheme = class extends Switcher { } set systemSettings(settings) { + if (settings === this.#systemSettings) + return; this.#systemSettings = settings; this.disable(); this.enable(); @@ -183,6 +185,7 @@ var SwitcherThemeIcon = class extends SwitcherTheme { var SwitcherThemeShell = class extends SwitcherTheme { #settings; + #extensionManagerConnection = null; constructor({ timer }) { const settings = extensionUtils.getSettings(`${Me.metadata['settings-schema']}.shell-variants`); @@ -194,10 +197,22 @@ var SwitcherThemeShell = class extends SwitcherTheme { themeKey: 'name', noSettingsUpdateSystemThemeCallback: time => this.#noSettingsUpdateSystemThemeCallback(time), }); - extensionManager.connect('extension-state-changed', this.#onExtensionStateChanged.bind(this)); this.#settings = settings; } + enable() { + super.enable(); + this.#extensionManagerConnection = extensionManager.connect('extension-state-changed', this.#onExtensionStateChanged.bind(this)); + } + + disable() { + super.disable(); + if (this.#extensionManagerConnection) { + extensionManager.disconnect(this.#extensionManagerConnection); + this.#extensionManagerConnection = null; + } + } + #noSettingsUpdateSystemThemeCallback(time) { const shellTheme = this.#settings.get_string(time); const stylesheet = utils.getShellThemeStylesheet(shellTheme);