From 12c300a7a23016ef956398a91a3831eca55f12d9 Mon Sep 17 00:00:00 2001 From: Aleksandr Mezin Date: Sat, 20 Nov 2021 01:15:37 +0600 Subject: [PATCH] extensionSystem: Ignore spurious disable-extension-version-validation change Ignore spurious change notificatons, when the setting didn't actually change (triggered by `dconf update`) Workaround for https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4808 Part-of: --- js/ui/extensionSystem.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js index ffa3cf38d..eec3693a4 100644 --- a/js/ui/extensionSystem.js +++ b/js/ui/extensionSystem.js @@ -28,6 +28,7 @@ var ExtensionManager = class { this._unloadedExtensions = new Map(); this._enabledExtensions = []; this._extensionOrder = []; + this._checkVersion = false; Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); } @@ -348,9 +349,7 @@ var ExtensionManager = class { // Default to error, we set success as the last step extension.state = ExtensionState.ERROR; - let checkVersion = !global.settings.get_boolean(EXTENSION_DISABLE_VERSION_CHECK_KEY); - - if (checkVersion && ExtensionUtils.isOutOfDate(extension)) { + if (this._checkVersion && ExtensionUtils.isOutOfDate(extension)) { extension.state = ExtensionState.OUT_OF_DATE; } else if (!this._canLoad(extension)) { this.logExtensionError(extension.uuid, new Error( @@ -525,6 +524,12 @@ var ExtensionManager = class { } _onVersionValidationChanged() { + const checkVersion = !global.settings.get_boolean(EXTENSION_DISABLE_VERSION_CHECK_KEY); + if (checkVersion === this._checkVersion) + return; + + this._checkVersion = checkVersion; + // Disabling extensions modifies the order array, so use a copy let extensionOrder = this._extensionOrder.slice(); @@ -577,6 +582,8 @@ var ExtensionManager = class { global.settings.connect('writable-changed::%s'.format(DISABLED_EXTENSIONS_KEY), this._onSettingsWritableChanged.bind(this)); + this._onVersionValidationChanged(); + this._enabledExtensions = this._getEnabledExtensions(); let perUserDir = Gio.File.new_for_path(global.userdatadir);