84 lines
3.4 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
}
|