|
|
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 |
|