Update prefs.js

This commit is contained in:
2025-07-23 16:52:10 +02:00
committed by GitHub
parent 82770f4b4d
commit 120c3c99ff
+1 -14
View File
@@ -1,11 +1,10 @@
// prefs.js - Finale Version nach dem Vorbild von Focus-Switcher // Settings Menu for Simple-Tiling
'use strict'; 'use strict';
const { Gtk, GObject } = imports.gi; const { Gtk, GObject } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
// Definiere die Spalten für unser Datenmodell
const COLUMN_ID = 0; // z.B. 'swap-master-window' const COLUMN_ID = 0; // z.B. 'swap-master-window'
const COLUMN_DESC = 1; // z.B. 'Master-Fenster tauschen' const COLUMN_DESC = 1; // z.B. 'Master-Fenster tauschen'
const COLUMN_KEY = 2; // Der Key-Code (eine Zahl) const COLUMN_KEY = 2; // Der Key-Code (eine Zahl)
@@ -31,7 +30,6 @@ function buildPrefsWidget() {
}); });
prefsWidget.add(title); prefsWidget.add(title);
// 1. Das Datenmodell (ListStore) erstellen
let store = new Gtk.ListStore(); let store = new Gtk.ListStore();
store.set_column_types([ store.set_column_types([
GObject.TYPE_STRING, // COLUMN_ID GObject.TYPE_STRING, // COLUMN_ID
@@ -40,14 +38,12 @@ function buildPrefsWidget() {
GObject.TYPE_INT, // COLUMN_MODS GObject.TYPE_INT, // COLUMN_MODS
]); ]);
// Fülle das Datenmodell mit unseren Einstellungen
addKeybinding(store, settings, 'swap-master-window', 'Master-Fenster tauschen'); addKeybinding(store, settings, 'swap-master-window', 'Master-Fenster tauschen');
addKeybinding(store, settings, 'swap-left-window', 'Fenster nach links tauschen'); addKeybinding(store, settings, 'swap-left-window', 'Fenster nach links tauschen');
addKeybinding(store, settings, 'swap-right-window', 'Fenster nach rechts tauschen'); addKeybinding(store, settings, 'swap-right-window', 'Fenster nach rechts tauschen');
addKeybinding(store, settings, 'swap-up-window', 'Fenster nach oben tauschen'); addKeybinding(store, settings, 'swap-up-window', 'Fenster nach oben tauschen');
addKeybinding(store, settings, 'swap-down-window', 'Fenster nach unten tauschen'); addKeybinding(store, settings, 'swap-down-window', 'Fenster nach unten tauschen');
// 2. Die Ansicht (TreeView) erstellen, die das Modell anzeigt
let treeView = new Gtk.TreeView({ let treeView = new Gtk.TreeView({
model: store, model: store,
headers_visible: false, headers_visible: false,
@@ -55,14 +51,12 @@ function buildPrefsWidget() {
visible: true visible: true
}); });
// Erstelle die Spalte für die Beschreibung
let descRenderer = new Gtk.CellRendererText(); let descRenderer = new Gtk.CellRendererText();
let descColumn = new Gtk.TreeViewColumn({ expand: true }); let descColumn = new Gtk.TreeViewColumn({ expand: true });
descColumn.pack_start(descRenderer, true); descColumn.pack_start(descRenderer, true);
descColumn.add_attribute(descRenderer, 'text', COLUMN_DESC); descColumn.add_attribute(descRenderer, 'text', COLUMN_DESC);
treeView.append_column(descColumn); treeView.append_column(descColumn);
// 3. Erstelle die Spalte für das Tastenkürzel mit dem Spezialisten Gtk.CellRendererAccel
let accelRenderer = new Gtk.CellRendererAccel({ let accelRenderer = new Gtk.CellRendererAccel({
'accel-mode': Gtk.CellRendererAccelMode.GTK, 'accel-mode': Gtk.CellRendererAccelMode.GTK,
'editable': true 'editable': true
@@ -75,21 +69,17 @@ function buildPrefsWidget() {
prefsWidget.add(treeView); prefsWidget.add(treeView);
// Verbinde die Events, die ausgelöst werden, wenn der Nutzer ein Kürzel ändert
accelRenderer.connect('accel-edited', (renderer, path_string, key, mods, hw_code) => { accelRenderer.connect('accel-edited', (renderer, path_string, key, mods, hw_code) => {
let [ok, iter] = store.get_iter_from_string(path_string); let [ok, iter] = store.get_iter_from_string(path_string);
if (!ok) return; if (!ok) return;
// Aktualisiere das Datenmodell...
store.set(iter, [COLUMN_KEY, COLUMN_MODS], [key, mods]); store.set(iter, [COLUMN_KEY, COLUMN_MODS], [key, mods]);
// ...und speichere die Änderung in den GSettings
let id = store.get_value(iter, COLUMN_ID); let id = store.get_value(iter, COLUMN_ID);
let accelString = Gtk.accelerator_name(key, mods); let accelString = Gtk.accelerator_name(key, mods);
settings.set_strv(id, [accelString]); settings.set_strv(id, [accelString]);
}); });
// Event für das Löschen eines Kürzels (z.B. mit Backspace)
accelRenderer.connect('accel-cleared', (renderer, path_string) => { accelRenderer.connect('accel-cleared', (renderer, path_string) => {
let [ok, iter] = store.get_iter_from_string(path_string); let [ok, iter] = store.get_iter_from_string(path_string);
if (!ok) return; if (!ok) return;
@@ -102,17 +92,14 @@ function buildPrefsWidget() {
return prefsWidget; return prefsWidget;
} }
// Hilfsfunktion zum Befüllen des Datenmodells
function addKeybinding(model, settings, id, description) { function addKeybinding(model, settings, id, description) {
let [key, mods] = [0, 0]; let [key, mods] = [0, 0];
// KORREKTUR: Leerzeichen zwischen const und strv eingefügt
const strv = settings.get_strv(id); const strv = settings.get_strv(id);
if (strv && strv.length > 0 && strv[0]) { if (strv && strv.length > 0 && strv[0]) {
[key, mods] = Gtk.accelerator_parse(strv[0]); [key, mods] = Gtk.accelerator_parse(strv[0]);
} }
// Füge eine neue Zeile zum Datenmodell hinzu
let iter = model.append(); let iter = model.append();
model.set(iter, model.set(iter,
[COLUMN_ID, COLUMN_DESC, COLUMN_KEY, COLUMN_MODS], [COLUMN_ID, COLUMN_DESC, COLUMN_KEY, COLUMN_MODS],