summaryrefslogtreecommitdiffstats
path: root/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js258
1 files changed, 258 insertions, 0 deletions
diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js
new file mode 100644
index 0000000..c90e8cd
--- /dev/null
+++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js
@@ -0,0 +1,258 @@
+/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+/**
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+**/
+const Gtk = imports.gi.Gtk;
+const GObject = imports.gi.GObject;
+
+const Gettext = imports.gettext.domain('gnome-shell-extensions-middleclickclose');
+const _ = Gettext.gettext;
+
+const Me = imports.misc.extensionUtils.getCurrentExtension();
+const ExtensionUtils = imports.misc.extensionUtils;
+
+let gsettings;
+let settings;
+function init() {
+ ExtensionUtils.initTranslations();
+ gsettings = ExtensionUtils.getSettings();
+ settings = {
+ close_button: {
+ type: "e",
+ label: _("Mouse button to close"),
+ help: _("Which mouse button triggers closing in overview."),
+ list: [
+ { nick: "left", name: _("Left"), id: 0 },
+ { nick: "middle", name: _("Middle"), id: 1 },
+ { nick: "right", name: _("Right"), id: 2 },
+ { nick: "button 4", name: _("Button 4"), id: 3 },
+ { nick: "button 5", name: _("Button 5"), id: 4 },
+ { nick: "button 6", name: _("Button 6"), id: 5 },
+ { nick: "button 7", name: _("Button 7"), id: 6 },
+ { nick: "button 8", name: _("Button 8"), id: 7 },
+ { nick: "button 9", name: _("Button 9"), id: 8 }
+ ],
+ default: 'middle'
+ },
+ rearrange_delay: {
+ type: "i",
+ label: _("Rearrange delay"),
+ help: _("How much time must pass with the pointer not moving for windows in overview to rearrange after one was closed."),
+ step: 50,
+ default: 750
+ }
+ };
+}
+
+function buildPrefsWidget() {
+ let frame = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL,
+ 'margin-top': 10,
+ 'margin-end': 10,
+ 'margin-bottom': 10,
+ 'margin-start': 10});
+ let vbox = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL,
+ 'margin-top': 10,
+ 'margin-end': 20,
+ 'margin-bottom': 20,
+ 'margin-start': 20});
+ for (setting in settings) {
+ hbox = buildHbox(settings, setting);
+ vbox.append(hbox);
+ }
+
+ frame.append(vbox);
+
+ return frame;
+}
+
+
+function buildHbox(settings, setting) {
+ let hbox;
+
+ if (settings[setting].type == 's')
+ hbox = createStringSetting(settings, setting);
+ if (settings[setting].type == "i")
+ hbox = createIntSetting(settings, setting);
+ if (settings[setting].type == "b")
+ hbox = createBoolSetting(settings, setting);
+ if (settings[setting].type == "r")
+ hbox = createRangeSetting(settings, setting);
+ if (settings[setting].type == "e")
+ hbox = createEnumSetting(settings, setting);
+
+ return hbox;
+}
+
+function createEnumSetting(settings, setting) {
+
+ let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL,
+ 'margin-top': 5,
+ spacing: 10});
+
+ let setting_label = new Gtk.Label({label: settings[setting].label,
+ xalign: 0 });
+
+ let model = new Gtk.ListStore();
+ model.set_column_types([GObject.TYPE_INT, GObject.TYPE_STRING]);
+ let setting_enum = new Gtk.ComboBox({model: model});
+ setting_enum.get_style_context().add_class('raised');
+ let renderer = new Gtk.CellRendererText();
+ setting_enum.pack_start(renderer, true);
+ setting_enum.add_attribute(renderer, 'text', 1);
+
+ for (let i=0; i<settings[setting].list.length; i++) {
+ let item = settings[setting].list[i];
+ let iter = model.append();
+ model.set(iter, [0, 1], [item.id, item.name]);
+ if (item.id == gsettings.get_enum(setting.replace('_', '-'))) {
+ setting_enum.set_active(item.id);
+ }
+ }
+
+ setting_enum.connect('changed', function(entry) {
+ let [success, iter] = setting_enum.get_active_iter();
+ if (!success)
+ return;
+
+ let id = model.get_value(iter, 0)
+ gsettings.set_enum(setting.replace('_', '-'), id);
+
+ });
+
+ if (settings[setting].help) {
+ setting_label.set_tooltip_text(settings[setting].help)
+ setting_enum.set_tooltip_text(settings[setting].help)
+ }
+
+ hbox.append(setting_label);
+ hbox.append(setting_enum);
+
+ return hbox;
+
+}
+
+function createStringSetting(settings, setting) {
+
+ let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL,
+ 'margin-top': 5,
+ spacing: 10});
+
+ let setting_label = new Gtk.Label({label: settings[setting].label,
+ xalign: 0 });
+
+ let setting_string = new Gtk.Entry({text: gsettings.get_string(setting.replace('_', '-'))});
+ setting_string.set_width_chars(30);
+ setting_string.connect('notify::text', function(entry) {
+ gsettings.set_string(setting.replace('_', '-'), entry.text);
+ });
+
+ if (settings[setting].mode == "passwd") {
+ setting_string.set_visibility(false);
+ }
+
+ if (settings[setting].help) {
+ setting_label.set_tooltip_text(settings[setting].help)
+ setting_string.set_tooltip_text(settings[setting].help)
+ }
+
+ hbox.append(setting_label);
+ hbox.append(setting_string);
+
+ return hbox;
+}
+
+function createIntSetting(settings, setting) {
+
+ let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL,
+ 'margin-top': 5,
+ spacing: 10});
+
+ let setting_label = new Gtk.Label({label: settings[setting].label,
+ xalign: 0 });
+
+ let adjustment = new Gtk.Adjustment({ lower: settings[setting].min || 0,
+ upper: settings[setting].max || 65535,
+ step_increment: settings[setting].step || 1});
+ let setting_int = new Gtk.SpinButton({adjustment: adjustment});
+ setting_int.set_value(gsettings.get_int(setting.replace('_', '-')));
+ setting_int.connect('value-changed', function(entry) {
+ gsettings.set_int(setting.replace('_', '-'), entry.value);
+ });
+
+ if (settings[setting].help) {
+ setting_label.set_tooltip_text(settings[setting].help)
+ setting_int.set_tooltip_text(settings[setting].help)
+ }
+
+ hbox.append(setting_label);
+ hbox.append(setting_int);
+
+ return hbox;
+}
+
+function createBoolSetting(settings, setting) {
+
+ let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL,
+ 'margin-top': 5,
+ spacing: 10});
+
+ let setting_label = new Gtk.Label({label: settings[setting].label,
+ xalign: 0 });
+
+ let setting_switch = new Gtk.Switch({active: gsettings.get_boolean(setting.replace('_', '-'))});
+ setting_switch.connect('notify::active', function(button) {
+ gsettings.set_boolean(setting.replace('_', '-'), button.active);
+ });
+
+ if (settings[setting].help) {
+ setting_label.set_tooltip_text(settings[setting].help)
+ setting_switch.set_tooltip_text(settings[setting].help)
+ }
+
+ hbox.append(setting_label);
+ hbox.append(setting_switch);
+
+ return hbox;
+}
+
+function createRangeSetting(settings, setting) {
+
+ let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL,
+ spacing: 10 });
+
+ let setting_label = new Gtk.Label({ label: settings[setting].label,
+ xalign: 0 });
+
+ let setting_range = Gtk.HScale.new_with_range(settings[setting].min,
+ settings[setting].max,
+ settings[setting].step);
+ setting_range.set_value(gsettings.get_int(setting));
+ setting_range.set_draw_value(false);
+ setting_range.add_mark(settings[setting].default,
+ Gtk.PositionType.BOTTOM, null);
+ setting_range.set_size_request(200, -1);
+ setting_range.connect('value-changed', function(slider) {
+ gsettings.set_int(setting, slider.get_value());
+ });
+
+ if (settings[setting].help) {
+ setting_label.set_tooltip_text(settings[setting].help)
+ setting_range.set_tooltip_text(settings[setting].help)
+ }
+
+ hbox.append(setting_label);
+ hbox.append(setting_range);
+
+ return hbox;
+}