258 lines
8.9 KiB
JavaScript
258 lines
8.9 KiB
JavaScript
/* -*- 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;
|
|
}
|