[gnome-shell] [lookingGlass] Add primitive extensions list



commit 2cb4dfb4a4d2b3ab4afcc133883c8d16b20b286f
Author: Colin Walters <walters verbum org>
Date:   Wed Oct 28 18:05:34 2009 -0400

    [lookingGlass] Add primitive extensions list
    
    In the future this should be more like the Firefox Addons UI
    probably with enable/disable/update checking, but stub it out
    here for now.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=599661

 data/theme/gnome-shell.css |   23 ++++++++++
 js/ui/lookingGlass.js      |  100 ++++++++++++++++++++++++++++++++++++++++++++
 src/shell-global.c         |    5 +--
 3 files changed, 124 insertions(+), 4 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index 62684f5..ce39715 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -402,6 +402,29 @@ StTooltip {
   spacing: 4px;
 }
 
+#lookingGlassExtensions {
+    padding: 4px;
+}
+
+.lg-extension-list {
+    padding: 4px;
+    spacing: 6px;
+}
+
+.lg-extension {
+    border: 1px solid #6f6f6f;
+    border-radius: 4px;
+    padding: 4px;
+}
+
+.lg-extension-name {
+    font-weight: bold;
+}
+
+.lg-extension-actions {
+    spacing: 6px;
+}
+
 /* Calendar popup */
 
 #calendarPopup {
diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js
index 469c86d..f66321d 100644
--- a/js/ui/lookingGlass.js
+++ b/js/ui/lookingGlass.js
@@ -9,7 +9,11 @@ const Shell = imports.gi.Shell;
 const Signals = imports.signals;
 const Lang = imports.lang;
 const Mainloop = imports.mainloop;
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
 
+const ExtensionSystem = imports.ui.extensionSystem;
+const Link = imports.ui.link;
 const Tweener = imports.ui.tweener;
 const Main = imports.ui.main;
 
@@ -340,6 +344,99 @@ ErrorLog.prototype = {
     }
 }
 
+function Extensions() {
+    this._init();
+}
+
+Extensions.prototype = {
+    _init: function() {
+        this.actor = new St.BoxLayout({ vertical: true,
+                                        name: 'lookingGlassExtensions' });
+        this._noExtensions = new St.Label({ style_class: 'lg-extensions-none',
+                                             text: _("No extensions installed") });
+        this._extensionsList = new St.BoxLayout({ vertical: true,
+                                                  style_class: 'lg-extensions-list' });
+        this.actor.add(this._extensionsList);
+        this._loadExtensionList();
+    },
+
+    _loadExtensionList: function() {
+        let extensions = ExtensionSystem.extensionMeta;
+        let totalExtensions = 0;
+        for (let uuid in extensions) {
+            let extensionDisplay = this._createExtensionDisplay(extensions[uuid]);
+            this._extensionsList.add(extensionDisplay);
+            totalExtensions++;
+        }
+        if (totalExtensions == 0) {
+            this._extensionsList.add(this._noExtensions);
+        }
+    },
+
+    _onViewSource: function (actor) {
+        let meta = actor._extensionMeta;
+        let file = Gio.file_new_for_path(meta.path);
+        let uri = file.get_uri();
+        Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context());
+        Main.lookingGlass.close();
+    },
+
+    _onWebPage: function (actor) {
+        let meta = actor._extensionMeta;
+        Gio.app_info_launch_default_for_uri(meta.url, global.create_app_launch_context());
+        Main.lookingGlass.close();
+    },
+
+    _stateToString: function(extensionState) {
+        switch (extensionState) {
+            case ExtensionSystem.ExtensionState.ENABLED:
+                return _("Enabled");
+            case ExtensionSystem.ExtensionState.DISABLED:
+                return _("Disabled");
+            case ExtensionSystem.ExtensionState.ERROR:
+                return _("Error");
+            case ExtensionSystem.ExtensionState.OUT_OF_DATE:
+                return _("Out of date");
+        }
+        return "Unknown"; // Not translated, shouldn't appear
+    },
+
+    _createExtensionDisplay: function(meta) {
+        let box = new St.BoxLayout({ style_class: 'lg-extension', vertical: true });
+        let name = new St.Label({ style_class: 'lg-extension-name',
+                                   text: meta.name });
+        box.add(name, { expand: true });
+        let description = new St.Label({ style_class: 'lg-extension-description',
+                                         text: meta.description });
+        box.add(description, { expand: true });
+
+        let metaBox = new St.BoxLayout();
+        box.add(metaBox);
+        let stateString = this._stateToString(meta.state);
+        let state = new St.Label({ style_class: 'lg-extension-state',
+                                   text: this._stateToString(meta.state) });
+
+        let actionsContainer = new St.Bin({ x_align: St.Align.END });
+        metaBox.add(actionsContainer);
+        let actionsBox = new St.BoxLayout({ style_class: 'lg-extension-actions' });
+        actionsContainer.set_child(actionsBox);
+
+        let viewsource = new Link.Link({ label: _("View Source") });
+        viewsource.actor._extensionMeta = meta;
+        viewsource.actor.connect('clicked', Lang.bind(this, this._onViewSource));
+        actionsBox.add(viewsource.actor);
+
+        if (meta.url) {
+            let webpage = new Link.Link({ label: _("Web Page") });
+            webpage.actor._extensionMeta = meta;
+            webpage.actor.connect('clicked', Lang.bind(this, this._onWebPage));
+            actionsBox.add(webpage.actor);
+        }
+
+        return box;
+    }
+};
+
 function LookingGlass() {
     this._init();
 }
@@ -441,6 +538,9 @@ LookingGlass.prototype = {
         this._errorLog = new ErrorLog();
         notebook.appendPage('Errors', this._errorLog.actor);
 
+        this._extensions = new Extensions();
+        notebook.appendPage('Extensions', this._extensions.actor);
+
         this._entry.clutter_text.connect('activate', Lang.bind(this, function (o, e) {
             let text = o.get_text();
             // Ensure we don't get newlines in the command; the history file is
diff --git a/src/shell-global.c b/src/shell-global.c
index ac68bc5..7fd37c9 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -577,10 +577,7 @@ shell_global_add_extension_importer (ShellGlobal *global,
 
   if (!JSVAL_IS_OBJECT (target_object))
     {
-      g_set_error(error,
-                  G_IO_ERROR,
-                  G_IO_ERROR_FAILED,
-                  "Invalid object");
+      g_error ("shell_global_add_extension_importer: invalid target object");
       return FALSE;
     }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]