diff --git a/prefs.js b/prefs.js index eff8bc7..786ab93 100644 --- a/prefs.js +++ b/prefs.js @@ -1,11 +1,10 @@ -// prefs.js - Finale Version nach dem Vorbild von Focus-Switcher +// Settings Menu for Simple-Tiling 'use strict'; const { Gtk, GObject } = imports.gi; const ExtensionUtils = imports.misc.extensionUtils; -// Definiere die Spalten für unser Datenmodell const COLUMN_ID = 0; // z.B. 'swap-master-window' const COLUMN_DESC = 1; // z.B. 'Master-Fenster tauschen' const COLUMN_KEY = 2; // Der Key-Code (eine Zahl) @@ -31,7 +30,6 @@ function buildPrefsWidget() { }); prefsWidget.add(title); - // 1. Das Datenmodell (ListStore) erstellen let store = new Gtk.ListStore(); store.set_column_types([ GObject.TYPE_STRING, // COLUMN_ID @@ -40,14 +38,12 @@ function buildPrefsWidget() { 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-left-window', 'Fenster nach links 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-down-window', 'Fenster nach unten tauschen'); - // 2. Die Ansicht (TreeView) erstellen, die das Modell anzeigt let treeView = new Gtk.TreeView({ model: store, headers_visible: false, @@ -55,14 +51,12 @@ function buildPrefsWidget() { visible: true }); - // Erstelle die Spalte für die Beschreibung let descRenderer = new Gtk.CellRendererText(); let descColumn = new Gtk.TreeViewColumn({ expand: true }); descColumn.pack_start(descRenderer, true); descColumn.add_attribute(descRenderer, 'text', COLUMN_DESC); treeView.append_column(descColumn); - // 3. Erstelle die Spalte für das Tastenkürzel mit dem Spezialisten Gtk.CellRendererAccel let accelRenderer = new Gtk.CellRendererAccel({ 'accel-mode': Gtk.CellRendererAccelMode.GTK, 'editable': true @@ -75,21 +69,17 @@ function buildPrefsWidget() { 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) => { let [ok, iter] = store.get_iter_from_string(path_string); if (!ok) return; - // Aktualisiere das Datenmodell... 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 accelString = Gtk.accelerator_name(key, mods); 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) => { let [ok, iter] = store.get_iter_from_string(path_string); if (!ok) return; @@ -102,17 +92,14 @@ function buildPrefsWidget() { return prefsWidget; } -// Hilfsfunktion zum Befüllen des Datenmodells function addKeybinding(model, settings, id, description) { let [key, mods] = [0, 0]; - // KORREKTUR: Leerzeichen zwischen const und strv eingefügt const strv = settings.get_strv(id); if (strv && strv.length > 0 && strv[0]) { [key, mods] = Gtk.accelerator_parse(strv[0]); } - // Füge eine neue Zeile zum Datenmodell hinzu let iter = model.append(); model.set(iter, [COLUMN_ID, COLUMN_DESC, COLUMN_KEY, COLUMN_MODS],