83 lines
1.9 KiB
JavaScript
83 lines
1.9 KiB
JavaScript
// Library imports
|
|
const GObject = imports.gi.GObject;
|
|
const Gdk = imports.gi.Gdk;
|
|
const Gtk = imports.gi.Gtk;
|
|
const ExtensionUtils = imports.misc.extensionUtils;
|
|
|
|
// Globals
|
|
const pretty_names = {
|
|
"shortcut-key": "Go to last workspace",
|
|
};
|
|
|
|
function init() {}
|
|
|
|
function buildPrefsWidget() {
|
|
let model = new Gtk.ListStore();
|
|
|
|
model.set_column_types([
|
|
GObject.TYPE_STRING,
|
|
GObject.TYPE_STRING,
|
|
GObject.TYPE_INT,
|
|
GObject.TYPE_INT,
|
|
]);
|
|
|
|
let settings = ExtensionUtils.getSettings();
|
|
|
|
for (key in pretty_names) {
|
|
append_hotkey(model, settings, key, pretty_names[key]);
|
|
}
|
|
|
|
let treeview = new Gtk.TreeView({
|
|
model: model,
|
|
});
|
|
|
|
let col;
|
|
let cellrend;
|
|
cellrend = new Gtk.CellRendererText();
|
|
col = new Gtk.TreeViewColumn({
|
|
title: "Keybinding",
|
|
});
|
|
col.pack_start(cellrend, true);
|
|
col.add_attribute(cellrend, "text", 1);
|
|
treeview.append_column(col);
|
|
|
|
cellrend = new Gtk.CellRendererAccel({
|
|
editable: true,
|
|
"accel-mode": Gtk.CellRendererAccelMode.GTK,
|
|
});
|
|
cellrend.connect("accel-edited", function (rend, iter, key, mods) {
|
|
let value = Gtk.accelerator_name(key, mods);
|
|
log("change");
|
|
log(value);
|
|
log(key);
|
|
log(mods);
|
|
let [success, iter1] = model.get_iter_from_string(iter);
|
|
if (!success) {
|
|
throw new Error("Something be broken, yo.");
|
|
}
|
|
let name = model.get_value(iter1, 0);
|
|
model.set(iter1, [2, 3], [mods, key]);
|
|
settings.set_strv(name, [value]);
|
|
});
|
|
|
|
col = new Gtk.TreeViewColumn({
|
|
title: "Accel",
|
|
});
|
|
|
|
col.pack_end(cellrend, false);
|
|
col.add_attribute(cellrend, "accel-mods", 2);
|
|
col.add_attribute(cellrend, "accel-key", 3);
|
|
treeview.append_column(col);
|
|
treeview.expand_all();
|
|
|
|
return treeview;
|
|
}
|
|
|
|
function append_hotkey(model, settings, name, pretty_name) {
|
|
let [_something, key, mods] = Gtk.accelerator_parse(
|
|
settings.get_strv(name)[0]
|
|
);
|
|
let row = model.insert(-1);
|
|
model.set(row, [0, 1, 2, 3], [name, pretty_name, mods, key]);
|
|
}
|