Add org.gnome.shell.enabled-extensions complementing disabled-extensions

If the former is empty (default), only the extensions not contained in
the latter are loaded.  Else, all extensions in the former that are
not contained in the latter are loaded.

https://bugzilla.gnome.org/show_bug.cgi?id=651088
This commit is contained in:
Tassilo Horn 2011-05-25 21:34:33 +02:00 committed by Colin Walters
parent 88df183450
commit 33a3b8046d
2 changed files with 19 additions and 4 deletions

View File

@ -15,8 +15,18 @@
<default>[]</default> <default>[]</default>
<_summary>Uuids of extensions to disable</_summary> <_summary>Uuids of extensions to disable</_summary>
<_description> <_description>
GNOME Shell extensions have a uuid property; GNOME Shell extensions have a uuid property; this key lists extensions
this key lists extensions which should not be loaded. which should not be loaded. This setting overrides enabled-extensions
for extensions that appear in both lists.
</_description>
</key>
<key name="enabled-extensions" type="as">
<default>[]</default>
<_summary>Uuids of extensions to enable</_summary>
<_description>
GNOME Shell extensions have a uuid property; this key lists extensions
which should be loaded. disabled-extensions overrides this setting for
extensions that appear in both lists.
</_description> </_description>
</key> </key>
<key name="enable-app-monitoring" type="b"> <key name="enable-app-monitoring" type="b">

View File

@ -23,8 +23,9 @@ const ExtensionType = {
const extensionMeta = {}; const extensionMeta = {};
// Maps uuid -> importer object (extension directory tree) // Maps uuid -> importer object (extension directory tree)
const extensions = {}; const extensions = {};
// Array of uuids // Arrays of uuids
var disabledExtensions; var disabledExtensions;
var enabledExtensions;
// GFile for user extensions // GFile for user extensions
var userExtensionsDir = null; var userExtensionsDir = null;
@ -178,6 +179,7 @@ function init() {
} }
disabledExtensions = global.settings.get_strv('disabled-extensions', -1); disabledExtensions = global.settings.get_strv('disabled-extensions', -1);
enabledExtensions = global.settings.get_strv('enabled-extensions', -1);
} }
function _loadExtensionsIn(dir, type) { function _loadExtensionsIn(dir, type) {
@ -195,7 +197,10 @@ function _loadExtensionsIn(dir, type) {
if (fileType != Gio.FileType.DIRECTORY) if (fileType != Gio.FileType.DIRECTORY)
continue; continue;
let name = info.get_name(); let name = info.get_name();
let enabled = disabledExtensions.indexOf(name) < 0; // Enable all but disabled extensions if enabledExtensions is not set.
// If it is set, enable one those, except they are disabled as well.
let enabled = (enabledExtensions.length == 0 || enabledExtensions.indexOf(name) >= 0)
&& disabledExtensions.indexOf(name) < 0;
let child = dir.get_child(name); let child = dir.get_child(name);
loadExtension(child, enabled, type); loadExtension(child, enabled, type);
} }