[gnome-shell] extensionSystem: Add kill-switch setting to disable user extensions



commit 7395aaf9b45690bbee232852a39d3b3595aa6d99
Author: Florian Müllner <fmuellner gnome org>
Date:   Mon Dec 14 23:52:38 2015 +0100

    extensionSystem: Add kill-switch setting to disable user extensions
    
    When gnome-shell fails to start on login, gnome-session tries to
    re-launch it again with all extensions disabled. This is currently
    implemented by clearing the list of enabled extensions, which means
    the user needs to re-enable their extensions manually again.
    To make this process less annoying, add a single 'kill-switch' setting
    gnome-session can use without interfering with the user setting.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778664

 data/org.gnome.shell.gschema.xml.in |    8 ++++++++
 js/ui/extensionSystem.js            |   13 ++++++++++---
 2 files changed, 18 insertions(+), 3 deletions(-)
---
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index c1e6b21..7348d09 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -21,6 +21,14 @@
         EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
       </description>
     </key>
+    <key name="disable-user-extensions" type="b">
+      <default>false</default>
+      <summary>Disable user extensions</summary>
+      <description>
+        Disable all extensions the user has enabled without affecting
+        the 'enabled-extension' setting.
+      </description>
+    </key>
     <key name="disable-extension-version-validation" type="b">
       <default>true</default>
       <summary>Disables the validation of extension version compatibility</summary>
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index ba33222..a4dc29e 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -38,6 +38,7 @@ const connect = Lang.bind(_signals, _signals.connect);
 const disconnect = Lang.bind(_signals, _signals.disconnect);
 
 const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
+const DISABLE_USER_EXTENSIONS_KEY = 'disable-user-extensions';
 const EXTENSION_DISABLE_VERSION_CHECK_KEY = 'disable-extension-version-validation';
 
 var initted = false;
@@ -238,11 +239,16 @@ function initExtension(uuid) {
 }
 
 function getEnabledExtensions() {
-    let extensions = global.settings.get_strv(ENABLED_EXTENSIONS_KEY);
-    if (!Array.isArray(Main.sessionMode.enabledExtensions))
+    let extensions;
+    if (Array.isArray(Main.sessionMode.enabledExtensions))
+        extensions = Main.sessionMode.enabledExtensions;
+    else
+        extensions = [];
+
+    if (global.settings.get_boolean(DISABLE_USER_EXTENSIONS_KEY))
         return extensions;
 
-    return Main.sessionMode.enabledExtensions.concat(extensions);
+    return extensions.concat(global.settings.get_strv(ENABLED_EXTENSIONS_KEY));
 }
 
 function onEnabledExtensionsChanged() {
@@ -288,6 +294,7 @@ function _onVersionValidationChanged() {
 
 function _loadExtensions() {
     global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged);
+    global.settings.connect('changed::' + DISABLE_USER_EXTENSIONS_KEY, onEnabledExtensionsChanged);
     global.settings.connect('changed::' + EXTENSION_DISABLE_VERSION_CHECK_KEY, _onVersionValidationChanged);
 
     enabledExtensions = getEnabledExtensions();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]