dotfiles/.local/share/gnome-shell/extensions/gnome-shell-go-to-last-work.../prefs.js

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]);
}