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);
|
ExtensionUtils.installImporter(extension);
|
||||||
|
|
||||||
// give extension prefs access to their own extension object
|
// give extension prefs access to their own extension object
|
||||||
ExtensionUtils.getCurrentExtension = () => extension;
|
ExtensionUtils.setCurrentExtension(extension);
|
||||||
|
|
||||||
const prefsModule = extension.imports.prefs;
|
const prefsModule = extension.imports.prefs;
|
||||||
prefsModule.init(extension.metadata);
|
prefsModule.init(extension.metadata);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/* exported ExtensionState, ExtensionType, getCurrentExtension,
|
/* exported ExtensionState, ExtensionType, getCurrentExtension,
|
||||||
getSettings, initTranslations, gettext, ngettext, pgettext,
|
getSettings, initTranslations, gettext, ngettext, pgettext,
|
||||||
openPrefs, isOutOfDate, installImporter, serializeExtension,
|
openPrefs, isOutOfDate, installImporter, serializeExtension,
|
||||||
deserializeExtension */
|
deserializeExtension, setCurrentExtension */
|
||||||
|
|
||||||
// Common utils for the extension system and the extension
|
// Common utils for the extension system and the extension
|
||||||
// preferences tool
|
// preferences tool
|
||||||
@ -13,6 +13,19 @@ const Gettext = imports.gettext;
|
|||||||
|
|
||||||
const Config = imports.misc.config;
|
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 = {
|
var ExtensionType = {
|
||||||
SYSTEM: 1,
|
SYSTEM: 1,
|
||||||
PER_USER: 2,
|
PER_USER: 2,
|
||||||
@ -41,6 +54,16 @@ const SERIALIZED_PROPERTIES = [
|
|||||||
'canChange',
|
'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:
|
* getCurrentExtension:
|
||||||
*
|
*
|
||||||
@ -48,6 +71,9 @@ const SERIALIZED_PROPERTIES = [
|
|||||||
* an extension.
|
* an extension.
|
||||||
*/
|
*/
|
||||||
function getCurrentExtension() {
|
function getCurrentExtension() {
|
||||||
|
if (_extension)
|
||||||
|
return _extension;
|
||||||
|
|
||||||
let stack = new Error().stack.split('\n');
|
let stack = new Error().stack.split('\n');
|
||||||
let extensionStackLine;
|
let extensionStackLine;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user