diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js index af2338f45..e9697d468 100644 --- a/js/misc/extensionUtils.js +++ b/js/misc/extensionUtils.js @@ -1,7 +1,7 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- /* exported ExtensionState, ExtensionType, getCurrentExtension, - getSettings, initTranslations, isOutOfDate, installImporter, - serializeExtension, deserializeExtension */ + getSettings, initTranslations, openPrefs, isOutOfDate, + installImporter, serializeExtension, deserializeExtension */ // Common utils for the extension system and the extension // preferences tool @@ -153,6 +153,27 @@ function getSettings(schema) { return new Gio.Settings({ settings_schema: schemaObj }); } +/** + * openPrefs: + * + * Open the preference dialog of the current extension + */ +function openPrefs() { + const extension = getCurrentExtension(); + + if (!extension) + throw new Error('openPrefs() can only be called from extensions'); + + try { + const extensionManager = imports.ui.main.extensionManager; + extensionManager.openExtensionPrefs(extension.uuid, '', {}); + } catch (e) { + if (e.name === 'ImportError') + throw new Error('openPrefs() cannot be called from preferences'); + logError(e, 'Failed to open extension preferences'); + } +} + /** * versionCheck: * @param {string[]} required - an array of versions we're compatible with