Update prefs.js
This commit is contained in:
@@ -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],
|
||||||
|
|||||||
Reference in New Issue
Block a user