Blame SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch

42f94a
From 7002431540fb01c8ce6bd8781e35ba1072741d94 Mon Sep 17 00:00:00 2001
42f94a
From: Rui Matos <tiagomatos@gmail.com>
42f94a
Date: Fri, 8 Nov 2013 13:58:09 +0100
42f94a
Subject: [PATCH] extensions: Add a SESSION_MODE extension type
42f94a
42f94a
This allows e.g. gnome-tweak-tool to present these extensions in a
42f94a
different way since they can't be disabled.
42f94a
---
42f94a
 js/misc/extensionUtils.js | 3 ++-
42f94a
 js/ui/extensionSystem.js  | 2 ++
42f94a
 2 files changed, 4 insertions(+), 1 deletion(-)
42f94a
42f94a
diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js
42f94a
index 9f77b4c40..1e25da335 100644
42f94a
--- a/js/misc/extensionUtils.js
42f94a
+++ b/js/misc/extensionUtils.js
42f94a
@@ -1,46 +1,47 @@
42f94a
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
42f94a
 
42f94a
 // Common utils for the extension system and the extension
42f94a
 // preferences tool
42f94a
 
42f94a
 const Lang = imports.lang;
42f94a
 const Signals = imports.signals;
42f94a
 
42f94a
 const Gio = imports.gi.Gio;
42f94a
 
42f94a
 const Config = imports.misc.config;
42f94a
 const FileUtils = imports.misc.fileUtils;
42f94a
 
42f94a
 var ExtensionType = {
42f94a
     SYSTEM: 1,
42f94a
-    PER_USER: 2
42f94a
+    PER_USER: 2,
42f94a
+    SESSION_MODE: 3
42f94a
 };
42f94a
 
42f94a
 // Maps uuid -> metadata object
42f94a
 var extensions = {};
42f94a
 
42f94a
 /**
42f94a
  * getCurrentExtension:
42f94a
  *
42f94a
  * Returns the current extension, or null if not called from an extension.
42f94a
  */
42f94a
 function getCurrentExtension() {
42f94a
     let stack = (new Error()).stack.split('\n');
42f94a
     let extensionStackLine;
42f94a
 
42f94a
     // Search for an occurrence of an extension stack frame
42f94a
     // Start at 1 because 0 is the stack frame of this function
42f94a
     for (let i = 1; i < stack.length; i++) {
42f94a
         if (stack[i].indexOf('/gnome-shell/extensions/') > -1) {
42f94a
             extensionStackLine = stack[i];
42f94a
             break;
42f94a
         }
42f94a
     }
42f94a
     if (!extensionStackLine)
42f94a
         return null;
42f94a
 
42f94a
     // The stack line is like:
42f94a
     //   init([object Object])@/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
42f94a
     //
42f94a
     // In the case that we're importing from
42f94a
     // module scope, the first field is blank:
42f94a
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
42f94a
index e35c01ab8..a013a3ee7 100644
42f94a
--- a/js/ui/extensionSystem.js
42f94a
+++ b/js/ui/extensionSystem.js
42f94a
@@ -289,60 +289,62 @@ function onEnabledExtensionsChanged() {
42f94a
 
42f94a
     enabledExtensions = newEnabledExtensions;
42f94a
 }
42f94a
 
42f94a
 function _onVersionValidationChanged() {
42f94a
     // we want to reload all extensions, but only enable
42f94a
     // extensions when allowed by the sessionMode, so
42f94a
     // temporarily disable them all
42f94a
     enabledExtensions = [];
42f94a
     for (let uuid in ExtensionUtils.extensions)
42f94a
         reloadExtension(ExtensionUtils.extensions[uuid]);
42f94a
     enabledExtensions = getEnabledExtensions();
42f94a
 
42f94a
     if (Main.sessionMode.allowExtensions) {
42f94a
         enabledExtensions.forEach(uuid => {
42f94a
             enableExtension(uuid);
42f94a
         });
42f94a
     }
42f94a
 }
42f94a
 
42f94a
 function _loadExtensions() {
42f94a
     global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged);
42f94a
     global.settings.connect('changed::' + DISABLE_USER_EXTENSIONS_KEY, onEnabledExtensionsChanged);
42f94a
     global.settings.connect('changed::' + EXTENSION_DISABLE_VERSION_CHECK_KEY, _onVersionValidationChanged);
42f94a
 
42f94a
     enabledExtensions = getEnabledExtensions();
42f94a
 
42f94a
     let finder = new ExtensionUtils.ExtensionFinder();
42f94a
     finder.connect('extension-found', (finder, extension) => {
42f94a
         loadExtension(extension);
42f94a
+        if (Main.sessionMode.enabledExtensions.indexOf(extension.uuid) != -1)
42f94a
+            extension.type = ExtensionUtils.ExtensionType.SESSION_MODE;
42f94a
     });
42f94a
     finder.scanExtensions();
42f94a
 }
42f94a
 
42f94a
 function enableAllExtensions() {
42f94a
     if (enabled)
42f94a
         return;
42f94a
 
42f94a
     if (!initted) {
42f94a
         _loadExtensions();
42f94a
         initted = true;
42f94a
     } else {
42f94a
         enabledExtensions.forEach(uuid => {
42f94a
             enableExtension(uuid);
42f94a
         });
42f94a
     }
42f94a
     enabled = true;
42f94a
 }
42f94a
 
42f94a
 function disableAllExtensions() {
42f94a
     if (!enabled)
42f94a
         return;
42f94a
 
42f94a
     if (initted) {
42f94a
         extensionOrder.slice().reverse().forEach(uuid => {
42f94a
             disableExtension(uuid);
42f94a
         });
42f94a
     }
42f94a
 
42f94a
     enabled = false;
42f94a
-- 
42f94a
2.17.1
42f94a