diff --git a/js/dbusServices/extensions/extensionPrefsDialog.js b/js/dbusServices/extensions/extensionPrefsDialog.js index 546af60ba..f041cfd38 100644 --- a/js/dbusServices/extensions/extensionPrefsDialog.js +++ b/js/dbusServices/extensions/extensionPrefsDialog.js @@ -7,8 +7,6 @@ import GLib from 'gi://GLib'; import GObject from 'gi://GObject'; import Gtk from 'gi://Gtk?version=4.0'; -const ExtensionUtils = imports.misc.extensionUtils; - export const ExtensionPrefsDialog = GObject.registerClass({ GTypeName: 'ExtensionPrefsDialog', }, class ExtensionPrefsDialog extends Adw.PreferencesWindow { @@ -27,9 +25,6 @@ export const ExtensionPrefsDialog = GObject.registerClass({ } async _loadPrefs() { - // give extension prefs access to their own extension object - ExtensionUtils.setCurrentExtension(this._extension); - const {dir, metadata} = this._extension; const prefsJs = dir.get_child('prefs.js'); diff --git a/js/dbusServices/extensions/extensionsService.js b/js/dbusServices/extensions/extensionsService.js index 4af99f8e3..1cf922550 100644 --- a/js/dbusServices/extensions/extensionsService.js +++ b/js/dbusServices/extensions/extensionsService.js @@ -7,6 +7,7 @@ import {ExtensionPrefsDialog} from './extensionPrefsDialog.js'; import {ServiceImplementation} from './dbusService.js'; const {deserializeExtension} = imports.misc.extensionUtils; +const {setExtensionManager} = imports.misc.extensionUtils; const {loadInterfaceXML} = imports.misc.dbusUtils; const ExtensionsIface = loadInterfaceXML('org.gnome.Shell.Extensions'); @@ -27,6 +28,7 @@ class ExtensionManager { } const extensionManager = new ExtensionManager(); +setExtensionManager(extensionManager); export const ExtensionsService = class extends ServiceImplementation { constructor() { diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js index f04d2a06b..9642734d6 100644 --- a/js/misc/extensionUtils.js +++ b/js/misc/extensionUtils.js @@ -2,7 +2,7 @@ /* exported ExtensionState, ExtensionType, getCurrentExtension, getSettings, initTranslations, gettext, ngettext, pgettext, openPrefs, isOutOfDate, serializeExtension, - deserializeExtension, setCurrentExtension */ + deserializeExtension, setExtensionManager */ // Common utils for the extension system and the extension // preferences tool @@ -14,18 +14,7 @@ const Gettext = imports.gettext; const Config = imports.misc.config; -let Main = null; - -try { - Main = imports.ui.main; -} catch (error) { - // Only log the error if it is not due to the - // missing import. - if (error?.name !== 'ImportError') - console.error(error); -} - -let _extension = null; +let _extensionManager = null; var ExtensionType = { SYSTEM: 1, @@ -58,13 +47,13 @@ const SERIALIZED_PROPERTIES = [ ]; /** - * @param {object} extension the extension object to use in utilities like `initTranslations()` + * @param {object} extensionManager to use in utilities like `initTranslations()` */ -function setCurrentExtension(extension) { - if (Main) - throw new Error('setCurrentExtension() can only be called from outside the shell'); +function setExtensionManager(extensionManager) { + if (_extensionManager) + throw new Error('Trying to override existing extension manager'); - _extension = extension; + _extensionManager = extensionManager; } /** @@ -74,9 +63,6 @@ function setCurrentExtension(extension) { * an extension. */ function getCurrentExtension() { - if (_extension) - return _extension; - const basePath = '/gnome-shell/extensions/'; // Search for an occurrence of an extension stack frame @@ -89,8 +75,9 @@ function getCurrentExtension() { return null; // local import, as the module is used from outside the gnome-shell process - // as well (not this function though) - let extensionManager = imports.ui.main.extensionManager; + // as well + if (!_extensionManager) + setExtensionManager(imports.ui.main.extensionManager); // The exact stack line differs depending on where the function // was called (function or module scope), and whether it's called @@ -106,7 +93,7 @@ function getCurrentExtension() { path = GLib.path_get_dirname(path); const dirName = GLib.path_get_basename(path); - const extension = extensionManager.lookup(dirName); + const extension = _extensionManager.lookup(dirName); if (extension !== undefined) return extension; } while (path !== '/');