summaryrefslogtreecommitdiffstats
path: root/extensions/hibernate-status/prefs.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/hibernate-status/prefs.js')
-rw-r--r--extensions/hibernate-status/prefs.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/extensions/hibernate-status/prefs.js b/extensions/hibernate-status/prefs.js
new file mode 100644
index 0000000..cdcd50e
--- /dev/null
+++ b/extensions/hibernate-status/prefs.js
@@ -0,0 +1,105 @@
+const Gio = imports.gi.Gio;
+const Gtk = imports.gi.Gtk;
+const Me = imports.misc.extensionUtils.getCurrentExtension();
+// Use __() and N__() for the extension gettext domain, and reuse
+// the shell domain with the default _() and N_()
+const Gettext = imports.gettext.domain('hibernate-status-button');
+const __ = Gettext.gettext;
+const N__ = function(e) { return e };
+const ExtensionUtils = imports.misc.extensionUtils;
+
+var Prefs = class Prefs {
+ /**
+ * Creates a new Settings-object to access the settings of this extension.
+ * @private
+ */
+ constructor() {
+ this.KEY_HIBERNATE_WORKS_CHECK = "hibernate-works-check";
+ this._schemaName = "org.gnome.shell.extensions.hibernate-status-button";
+
+ let schemaDir = Me.dir.get_child('schemas').get_path();
+
+ let schemaSource = Gio.SettingsSchemaSource.new_from_directory(
+ schemaDir, Gio.SettingsSchemaSource.get_default(), false
+ );
+ let schema = schemaSource.lookup(this._schemaName, false);
+
+ this._setting = new Gio.Settings({
+ settings_schema: schema
+ });
+ }
+ /**
+ * <p>Binds the given 'callback'-function to the "changed"-signal on the given
+ * key.</p>
+ * <p>The 'callback'-function is passed an argument which holds the new
+ * value of 'key'. The argument is of type "GLib.Variant". Given that the
+ * receiver knows the internal type, use one of the get_XX()-methods to get
+ * it's actual value.</p>
+ * @see http://www.roojs.com/seed/gir-1.2-gtk-3.0/gjs/GLib.Variant.html
+ * @param key the key to watch for changes.
+ * @param callback the callback-function to call.
+ */
+ bindKey(key, callback) {
+ // Validate:
+ if (key === undefined || key === null || typeof key !== "string") {
+ throw TypeError("The 'key' should be a string. Got: '" + key + "'");
+ }
+ if (callback === undefined || callback === null || typeof callback !== "function") {
+ throw TypeError("'callback' needs to be a function. Got: " + callback);
+ }
+ // Bind:
+ this._setting.connect("changed::" + key, function (source, key) {
+ callback(source.get_value(key));
+ });
+ }
+ /**
+ * Get if check for working hibernation is enabled. The user might
+ * choose to disable it if we happen to be wrong.
+ *
+ * @returns bool true if we need to check if hibernation works.
+ */
+ getHibernateWorksCheckEnabled() {
+ return this._setting.get_boolean(this.KEY_HIBERNATE_WORKS_CHECK);
+ }
+ /**
+ * Set if check for working hibernation is enabled. The user might
+ * choose to disable it if we happen to be wrong.
+ *
+ * @returns bool true if we need to check if hibernation works.
+ */
+ setHibernateWorksCheckEnabled(enabled) {
+ let key = this.KEY_HIBERNATE_WORKS_CHECK;
+ if (this._setting.is_writable(key)) {
+ if (this._setting.set_boolean(key, enabled)) {
+ Gio.Settings.sync();
+ } else {
+ throw this._errorSet(key);
+ }
+ } else {
+ throw this._errorWritable(key);
+ }
+ }
+ _errorWritable(key) {
+ return "The key '" + key + "' is not writable.";
+ }
+ _errorSet(key) {
+ return "Couldn't set the key '" + key + "'";
+ }
+}
+
+// These "preferences" aren't user accessible so define
+// init() and buildPrefsWidget() to empty functions
+function init() {
+ ExtensionUtils.initTranslations('hibernate-status-button');
+}
+function buildPrefsWidget() {
+ let frame = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL,
+ 'margin-top': 10,
+ 'margin-end': 10,
+ 'margin-bottom': 10,
+ 'margin-start': 10});
+ let setting_label = new Gtk.Label({label: __("This extension has no settings available"),
+ xalign: 0 });
+ frame.append(setting_label);
+ return frame;
+}