[gnome-shell] extensionSystem: Fix deferred loading of extensions
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] extensionSystem: Fix deferred loading of extensions
- Date: Thu, 27 Oct 2011 21:30:34 +0000 (UTC)
commit cc94076ffb5825596c98be6d421da53f229c3be7
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Tue Oct 25 14:38:25 2011 -0400
extensionSystem: Fix deferred loading of extensions
We need to show the list of installed extensions on EGO, so we can't defer
loading by not creating the extension meta.
https://bugzilla.gnome.org/show_bug.cgi?id=662704
js/ui/extensionSystem.js | 25 ++++++++++++++-----------
js/ui/lookingGlass.js | 1 +
2 files changed, 15 insertions(+), 11 deletions(-)
---
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 95c3a29..66f0904 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -22,6 +22,7 @@ const ExtensionState = {
ERROR: 3,
OUT_OF_DATE: 4,
DOWNLOADING: 5,
+ INITIALIZED: 6,
// Used as an error state for operations on unknown extensions,
// should never be in a real extensionMeta object.
@@ -62,8 +63,6 @@ const extensionMeta = {};
const extensions = {};
// Maps uuid -> extension state object (returned from init())
const extensionStateObjs = {};
-// Maps uuid -> [GFile to the extension directory, Extension type]
-const extensionDirs = {};
// Contains the order that extensions were enabled in.
const extensionOrder = [];
@@ -260,11 +259,11 @@ function disableExtension(uuid) {
function enableExtension(uuid) {
let meta = extensionMeta[uuid];
- if (!meta) {
- if (extensionDirs[uuid]) {
- let [dir, type] = extensionDirs[uuid];
- loadExtension(dir, type);
- }
+ if (!meta)
+ return;
+
+ if (meta.state == ExtensionState.INITIALIZED) {
+ loadExtension(meta.dir, meta.type, true);
return;
}
@@ -296,7 +295,7 @@ function logExtensionError(uuid, message, state) {
state: state });
}
-function loadExtension(dir, type) {
+function loadExtension(dir, type, enabled) {
let info;
let uuid = dir.get_basename();
@@ -353,6 +352,7 @@ function loadExtension(dir, type) {
extensionMeta[uuid] = meta;
meta.type = type;
+ meta.dir = dir;
meta.path = dir.get_path();
meta.error = '';
@@ -366,6 +366,11 @@ function loadExtension(dir, type) {
return;
}
+ if (!enabled) {
+ meta.state = ExtensionState.INITIALIZED;
+ return;
+ }
+
let extensionJs = dir.get_child('extension.js');
if (!extensionJs.query_exists(null)) {
logExtensionError(uuid, 'Missing extension.js');
@@ -485,9 +490,7 @@ function _loadExtensionsIn(dir, type) {
let name = info.get_name();
let child = dir.get_child(name);
let enabled = enabledExtensions.indexOf(name) != -1;
- extensionDirs[name] = [dir, type];
- if (enabled)
- loadExtension(child, type);
+ loadExtension(child, type, enabled);
}
fileEnum.close(null);
}
diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js
index 0f0dfe9..4e383b3 100644
--- a/js/ui/lookingGlass.js
+++ b/js/ui/lookingGlass.js
@@ -737,6 +737,7 @@ Extensions.prototype = {
case ExtensionSystem.ExtensionState.ENABLED:
return _("Enabled");
case ExtensionSystem.ExtensionState.DISABLED:
+ case ExtensionSystem.ExtensionState.INITIALIZED:
return _("Disabled");
case ExtensionSystem.ExtensionState.ERROR:
return _("Error");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]