| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import Gio from 'gi://Gio';
- import Gtk from 'gi://Gtk';
- import './prefs/shortcutListener.js';
- import {Shortcut, Switches, Radio, Spin, Combo} from './common.js';
- import {getKeybindingController} from './keybindingController.js';
- import {saveConfiguration} from './utils.js';
- import {ExtensionPreferences} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
- export default class GrimblePreferences extends ExtensionPreferences {
- fillPreferencesWindow(window) {
- const settings = this.getSettings();
- const builder = Gtk.Builder.new_from_file(`${this.path}/ui/prefs.ui`);
- const page1 = this.createGeneralSettingsPage(builder, settings);
- const page2 = this.createKeybindingsPage(builder, settings);
- window.add(page1);
- window.add(page2);
- return Promise.resolve();
- }
- createGeneralSettingsPage(builder, settings) {
- const page1 = builder.get_object('general');
- this._bindRadioButtons(builder, settings);
- this._bindSwitches(builder, settings);
- this._bindSpinbuttons(builder, settings);
- return page1;
- }
- createKeybindingsPage(builder, settings) {
- const page2 = builder.get_object('keybindings');
- const comboRow = Combo.getCombo();
- comboRow.forEach(({key, rowNames}) => {
- const combo = builder.get_object(key.replaceAll('-', '_'));
- let lastValue = settings.get_string(key);
- let row = rowNames.findIndex(item => lastValue === item);
- if (row === -1)
- row = 0;
- combo.set_selected(row);
- combo.connect('notify::selected-item', widget => {
- settings.set_string(key, rowNames[widget.get_selected()]);
- });
- getKeybindingController().connect('keybinding-changed', () => {
- combo.set_selected(rowNames.findIndex(item => item === 'Custom'));
- const shortcuts = Shortcut.getShortcuts();
- let o = {};
- for (const p of shortcuts)
- o[p] = settings.get_strv(p) ?? [];
- saveConfiguration('custom.json', o);
- });
- });
- let keys = Shortcut.getShortcuts();
- keys.forEach(key => {
- const shortcut = builder.get_object(key.replaceAll('-', '_'));
- shortcut.initialize(key, settings);
- });
- return page2;
- }
- _bindRadioButtons(builder, settings) {
- const radioButtons = Radio.getRadios();
- radioButtons.forEach(({key, rowNames}) => {
- const currActive = settings.get_int(key);
- rowNames.forEach((name, idx) => {
- const row = builder.get_object(name.replaceAll('-', '_'));
- const checkButton = row.activatable_widget;
- checkButton.connect('toggled', () => {
- settings.set_int(key, idx);
- });
- // Set initial state
- if (idx === currActive)
- checkButton.activate();
- });
- });
- }
- _bindSwitches(builder, settings) {
- const switches = Switches.getSwitches();
- switches.forEach(key => {
- const widget = builder.get_object(key.replaceAll('-', '_'));
- settings.bind(key, widget, 'active', Gio.SettingsBindFlags.DEFAULT);
- });
- }
- _bindSpinbuttons(builder, settings) {
- const spinButtons = Spin.getSpins();
- spinButtons.forEach(key => {
- const widget = builder.get_object(key.replaceAll('-', '_'));
- settings.bind(key, widget, 'value', Gio.SettingsBindFlags.DEFAULT);
- });
- }
- }
|