Files
dotfiles/gnome/.local/share/gnome-shell/extensions/grimble@lmt.github.io/settingsHandlers/comboRowHandler.js

84 lines
3.4 KiB
JavaScript

import {Combo, Shortcut} from '../common.js';
import {loadConfiguration, saveConfiguration} from '../utils.js';
import GLib from 'gi://GLib';
export default class ComboRowHandler {
_combos;
_windowManager;
constructor(windowManager, extension) {
this._windowManager = windowManager;
this._combos = Combo.getCombo();
this._combos.forEach(({key}) => {
extension._settings?.connect(`changed::${key}`, () => this._onComboChanged(key, extension));
});
}
_onComboChanged(key, extension) {
const shortcuts = Shortcut.getShortcuts();
switch (key) {
case 'keybinding-config':
if (extension.metadata && extension._settings?.get_string('keybinding-config')) {
let conf = extension._settings?.get_string('keybinding-config');
if (conf === 'i3') {
loadConfiguration(`${extension.path}/configs/i3.json`, c => {
if (extension._settings) {
for (const p of shortcuts) {
if (c[p])
extension._settings.set_strv(p, [c[p]]);
else
extension._settings.set_strv(p, []);
}
}
}, () => { });
} else if (conf === 'Grimble') {
loadConfiguration(`${extension.path}/configs/grimble.json`, c => {
if (extension._settings) {
for (const p of shortcuts) {
if (c[p])
extension._settings.set_strv(p, [c[p]]);
else
extension._settings.set_strv(p, []);
}
}
}, () => { });
} else if (conf === 'None') {
loadConfiguration(`${extension.path}/configs/default.json`, c => {
if (extension._settings) {
for (const p of shortcuts) {
if (c[p])
extension._settings.set_strv(p, [c[p]]);
else
extension._settings.set_strv(p, []);
}
}
}, () => { });
} else if (conf === 'Custom') {
const userPath = GLib.get_user_config_dir();
let o = {};
for (const p of shortcuts)
o[p] = extension._settings.get_strv(p) ?? [];
loadConfiguration(`${userPath}/grimble/config/custom.json`, c => {
if (extension._settings) {
for (const p of shortcuts) {
if (c[p])
extension._settings.set_strv(p, c[p]);
else
extension._settings.set_strv(p, []);
}
}
}, () => {
saveConfiguration('custom.json', o);
});
}
}
break;
default:
break;
}
}
}