diff --git a/extensions/example/Makefile.am b/extensions/example/Makefile.am index 9f63ef64..3b2d3e10 100644 --- a/extensions/example/Makefile.am +++ b/extensions/example/Makefile.am @@ -1,3 +1,6 @@ EXTENSION_ID = example +EXTRA_MODULES = prefs.js + include ../../extension.mk +include ../../settings.mk diff --git a/extensions/example/extension.js b/extensions/example/extension.js index b8b0ea91..d2de6f4c 100644 --- a/extensions/example/extension.js +++ b/extensions/example/extension.js @@ -1,3 +1,4 @@ +// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // Sample extension code, makes clicking on the panel show a message const St = imports.gi.St; const Mainloop = imports.mainloop; @@ -12,11 +13,14 @@ const Me = ExtensionUtils.getCurrentExtension(); const Convenience = Me.imports.convenience; function _showHello() { - let text = new St.Label({ style_class: 'helloworld-label', text: _("Hello, world!") }); + let settings = Convenience.getSettings(); + let text = settings.get_string('hello-text') || _("Hello, world!"); + + let label = new St.Label({ style_class: 'helloworld-label', text: text }); let monitor = Main.layoutManager.primaryMonitor; - global.stage.add_actor(text); - text.set_position(Math.floor (monitor.width / 2 - text.width / 2), Math.floor(monitor.height / 2 - text.height / 2)); - Mainloop.timeout_add(3000, function () { text.destroy(); }); + global.stage.add_actor(label); + label.set_position(Math.floor (monitor.width / 2 - label.width / 2), Math.floor(monitor.height / 2 - label.height / 2)); + Mainloop.timeout_add(3000, function () { label.destroy(); }); } // Put your extension initialization code here diff --git a/extensions/example/org.gnome.shell.extensions.example.gschema.xml.in b/extensions/example/org.gnome.shell.extensions.example.gschema.xml.in new file mode 100644 index 00000000..23aa34f0 --- /dev/null +++ b/extensions/example/org.gnome.shell.extensions.example.gschema.xml.in @@ -0,0 +1,9 @@ + + + + '' + <_summary>Alternative greeting text. + <_description>If not empty, it contains the text that will be shown when clicking on the panel. + + + diff --git a/extensions/example/prefs.js b/extensions/example/prefs.js new file mode 100644 index 00000000..b82200fd --- /dev/null +++ b/extensions/example/prefs.js @@ -0,0 +1,52 @@ +// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- + +const GLib = imports.gi.GLib; +const GObject = imports.gi.GObject; +const Gio = imports.gi.Gio; +const Gtk = imports.gi.Gtk; + +const Gettext = imports.gettext.domain('gnome-shell-extensions'); +const _ = Gettext.gettext; + +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const Convenience = Me.imports.convenience; + +function init() { + Convenience.initTranslations(); +} + +const ExamplePrefsWidget = new GObject.Class({ + Name: 'Example.Prefs.Widget', + GTypeName: 'ExamplePrefsWidget', + Extends: Gtk.Grid, + + _init: function(params) { + this.parent(params); + this.margin = this.row_spacing = this.column_spacing = 10; + + // TRANSLATORS: Example is the name of the extension, should not be + // translated + let primaryText = _("Example aims to show how to build well behaved \ +extensions for the Shell and as such it has little functionality on its own.\n\ +Nevertheless it's possible to customize the greeting message."); + + this.attach(new Gtk.Label({ label: primaryText, wrap: true }), 0, 0, 2, 1); + + this.attach(new Gtk.Label({ label: '' + _("Message:") + '', use_markup: true }), + 0, 1, 1, 1); + + let entry = new Gtk.Entry({ hexpand: true }); + this.attach(entry, 1, 1, 1, 1); + + this._settings = Convenience.getSettings(); + this._settings.bind('hello-text', entry, 'text', Gio.SettingsBindFlags.DEFAULT); + } +}); + +function buildPrefsWidget() { + let widget = new ExamplePrefsWidget(); + widget.show_all(); + + return widget; +}