[gnome-shell] [lookingGlass] Add primitive extensions list
- From: Colin Walters <walters src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-shell] [lookingGlass] Add primitive extensions list
- Date: Fri, 18 Dec 2009 16:21:30 +0000 (UTC)
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]