1
0
Fork 0
gnome-shell-extensions-extra/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js

259 lines
8.9 KiB
JavaScript
Raw Normal View History

/* -*- 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;
}