comboRowHandler.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import {Combo, Shortcut} from '../common.js';
  2. import {loadConfiguration, saveConfiguration} from '../utils.js';
  3. import GLib from 'gi://GLib';
  4. export default class ComboRowHandler {
  5. _combos;
  6. _windowManager;
  7. constructor(windowManager, extension) {
  8. this._windowManager = windowManager;
  9. this._combos = Combo.getCombo();
  10. this._combos.forEach(({key}) => {
  11. extension._settings?.connect(`changed::${key}`, () => this._onComboChanged(key, extension));
  12. });
  13. }
  14. _onComboChanged(key, extension) {
  15. const shortcuts = Shortcut.getShortcuts();
  16. switch (key) {
  17. case 'keybinding-config':
  18. if (extension.metadata && extension._settings?.get_string('keybinding-config')) {
  19. let conf = extension._settings?.get_string('keybinding-config');
  20. if (conf === 'i3') {
  21. loadConfiguration(`${extension.path}/configs/i3.json`, c => {
  22. if (extension._settings) {
  23. for (const p of shortcuts) {
  24. if (c[p])
  25. extension._settings.set_strv(p, [c[p]]);
  26. else
  27. extension._settings.set_strv(p, []);
  28. }
  29. }
  30. }, () => { });
  31. } else if (conf === 'Grimble') {
  32. loadConfiguration(`${extension.path}/configs/grimble.json`, c => {
  33. if (extension._settings) {
  34. for (const p of shortcuts) {
  35. if (c[p])
  36. extension._settings.set_strv(p, [c[p]]);
  37. else
  38. extension._settings.set_strv(p, []);
  39. }
  40. }
  41. }, () => { });
  42. } else if (conf === 'None') {
  43. loadConfiguration(`${extension.path}/configs/default.json`, c => {
  44. if (extension._settings) {
  45. for (const p of shortcuts) {
  46. if (c[p])
  47. extension._settings.set_strv(p, [c[p]]);
  48. else
  49. extension._settings.set_strv(p, []);
  50. }
  51. }
  52. }, () => { });
  53. } else if (conf === 'Custom') {
  54. const userPath = GLib.get_user_config_dir();
  55. let o = {};
  56. for (const p of shortcuts)
  57. o[p] = extension._settings.get_strv(p) ?? [];
  58. loadConfiguration(`${userPath}/grimble/config/custom.json`, c => {
  59. if (extension._settings) {
  60. for (const p of shortcuts) {
  61. if (c[p])
  62. extension._settings.set_strv(p, c[p]);
  63. else
  64. extension._settings.set_strv(p, []);
  65. }
  66. }
  67. }, () => {
  68. saveConfiguration('custom.json', o);
  69. });
  70. }
  71. }
  72. break;
  73. default:
  74. break;
  75. }
  76. }
  77. }