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

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