extensionUtils: Add utility for setting the current extension
ES modules do not allow exports to be overriden, in anticipation of the ESM port add a `setCurrentExtension` utility which will throw if used in the shell. This is tested using a conditional import of Main. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2363>
This commit is contained in:
parent
71765a1056
commit
61eef2fb9b
@ -18,7 +18,7 @@ var ExtensionPrefsDialog = GObject.registerClass({
|
||||
ExtensionUtils.installImporter(extension);
|
||||
|
||||
// give extension prefs access to their own extension object
|
||||
ExtensionUtils.getCurrentExtension = () => extension;
|
||||
ExtensionUtils.setCurrentExtension(extension);
|
||||
|
||||
const prefsModule = extension.imports.prefs;
|
||||
prefsModule.init(extension.metadata);
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* exported ExtensionState, ExtensionType, getCurrentExtension,
|
||||
getSettings, initTranslations, gettext, ngettext, pgettext,
|
||||
openPrefs, isOutOfDate, installImporter, serializeExtension,
|
||||
deserializeExtension */
|
||||
deserializeExtension, setCurrentExtension */
|
||||
|
||||
// Common utils for the extension system and the extension
|
||||
// preferences tool
|
||||
@ -13,6 +13,19 @@ 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;
|
||||
|
||||
var ExtensionType = {
|
||||
SYSTEM: 1,
|
||||
PER_USER: 2,
|
||||
@ -41,6 +54,16 @@ const SERIALIZED_PROPERTIES = [
|
||||
'canChange',
|
||||
];
|
||||
|
||||
/**
|
||||
* @param {object} extension the extension object to use in utilities like `initTranslations()`
|
||||
*/
|
||||
function setCurrentExtension(extension) {
|
||||
if (Main)
|
||||
throw new Error('setCurrentExtension() can only be called from outside the shell');
|
||||
|
||||
_extension = extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* getCurrentExtension:
|
||||
*
|
||||
@ -48,6 +71,9 @@ const SERIALIZED_PROPERTIES = [
|
||||
* an extension.
|
||||
*/
|
||||
function getCurrentExtension() {
|
||||
if (_extension)
|
||||
return _extension;
|
||||
|
||||
let stack = new Error().stack.split('\n');
|
||||
let extensionStackLine;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user