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