diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-20 19:53:36 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-20 19:53:36 +0300 |
| commit | 0747e161dd4fd089346b0c14d38229d612e53a5f (patch) | |
| tree | ac467562c09e691b03c13f7d240f5d5b721c064d | |
| parent | de9ceaeb0cc7040153c3ba1288180bd38767f639 (diff) | |
shortcuts: fix the GtkBuilder UI XML so ? doesn't crash on startup
The inline SHORTCUTS_UI string had mismatched closing tags (extra
</child> elements), so gtk_builder_new_from_string failed with
"Element child was closed, but the currently open element is object"
and aborted the process the moment ? was pressed. Regenerate the UI
with correct <object>/<child> nesting (validated with xmllint).
| -rw-r--r-- | src/window.c | 252 |
1 files changed, 151 insertions, 101 deletions
diff --git a/src/window.c b/src/window.c index 50a6e04..8e74db8 100644 --- a/src/window.c +++ b/src/window.c @@ -299,107 +299,157 @@ _action_mark_all(GSimpleAction *p_a, GVariant *p_v, gpointer p_data) { /* GtkBuilder UI for the shortcuts overlay (?). Accel strings use gtk * accelerator syntax: "h Left" means h OR Left triggers it. */ static const char *SHORTCUTS_UI = - "<interface>" - " <object class=\"GtkShortcutsWindow\" id=\"shortcuts\">" - " <property name=\"modal\">True</property>" - " <property name=\"section-name\">shortcuts</property>" - " <child>" - " <object class=\"GtkShortcutsSection\" id=\"sec\">" - " <property name=\"section-name\">shortcuts</property>" - " <property name=\"title\">ggaze</property>" - " <child>" - " <object class=\"GtkShortcutsGroup\">" - " <property name=\"title\">Navigation</property>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">h Left</property>" - " <property name=\"title\">Previous " - "image</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">l Right</property>" - " <property name=\"title\">Next " - "image</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">g</property>" - " <property name=\"title\">First " - "image</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">Shift+G</property>" - " <property name=\"title\">Last " - "image</property></object></child>" - " </object></child>" - " <child>" - " <object class=\"GtkShortcutsGroup\">" - " <property name=\"title\">View</property>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">t</property>" - " <property name=\"title\">Toggle large / " - "grid</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">f</property>" - " <property " - "name=\"title\">Fullscreen</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">Shift+S</property>" - " <property " - "name=\"title\">Slideshow</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">i</property>" - " <property name=\"title\">Info " - "overlay</property></object></child>" - " </object></child>" - " <child>" - " <object class=\"GtkShortcutsGroup\">" - " <property name=\"title\">Selection (marks)</property>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">v</property>" - " <property name=\"title\">Toggle mark on " - "highlighted</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">Ctrl+a</property>" - " <property name=\"title\">Mark all</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">Escape</property>" - " <property name=\"title\">Clear marks / " - "back</property></object></child>" - " </object></child>" - " <child>" - " <object class=\"GtkShortcutsGroup\">" - " <property name=\"title\">Files</property>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">o</property>" - " <property name=\"title\">Open</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">d</property>" - " <property name=\"title\">Trash</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">Shift+D</property>" - " <property name=\"title\">Delete " - "permanently</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">u</property>" - " <property name=\"title\">Undo</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">q</property>" - " <property name=\"title\">Quit</property></object></child>" - " </object></child>" - " <child>" - " <object class=\"GtkShortcutsGroup\">" - " <property name=\"title\">Zoom</property>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">plus equal</property>" - " <property name=\"title\">Zoom in</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">minus underscore</property>" - " <property name=\"title\">Zoom out</property></object></child>" - " <child><object class=\"GtkShortcutsShortcut\">" - " <property name=\"accelerator\">question</property>" - " <property name=\"title\">Show this " - "help</property></object></child>" - " </object></child>" - " </object></child>" - " </child>" - " </object></child>" - "</interface>"; + "<interface>\n" + " <object class=\"GtkShortcutsWindow\" id=\"shortcuts\">\n" + " <property name=\"modal\">True</property>\n" + " <property name=\"section-name\">shortcuts</property>\n" + " <child>\n" + " <object class=\"GtkShortcutsSection\" id=\"sec\">\n" + " <property name=\"section-name\">shortcuts</property>\n" + " <property name=\"title\">ggaze</property>\n" + " <child>\n" + " <object class=\"GtkShortcutsGroup\">\n" + " <property name=\"title\">Navigation</property>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">h Left</property>\n" + " <property name=\"title\">Previous image</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">l Right</property>\n" + " <property name=\"title\">Next image</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">g</property>\n" + " <property name=\"title\">First image</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">Shift+G</property>\n" + " <property name=\"title\">Last image</property>\n" + " </object>\n" + " </child>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsGroup\">\n" + " <property name=\"title\">View</property>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">t</property>\n" + " <property name=\"title\">Toggle large / grid</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">f</property>\n" + " <property name=\"title\">Fullscreen</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">Shift+S</property>\n" + " <property name=\"title\">Slideshow</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">i</property>\n" + " <property name=\"title\">Info overlay</property>\n" + " </object>\n" + " </child>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsGroup\">\n" + " <property name=\"title\">Selection (marks)</property>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">v</property>\n" + " <property name=\"title\">Toggle mark on highlighted</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">Ctrl+a</property>\n" + " <property name=\"title\">Mark all</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">Escape</property>\n" + " <property name=\"title\">Clear marks / back</property>\n" + " </object>\n" + " </child>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsGroup\">\n" + " <property name=\"title\">Files</property>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">o</property>\n" + " <property name=\"title\">Open</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">d</property>\n" + " <property name=\"title\">Trash</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">Shift+D</property>\n" + " <property name=\"title\">Delete permanently</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">u</property>\n" + " <property name=\"title\">Undo</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">q</property>\n" + " <property name=\"title\">Quit</property>\n" + " </object>\n" + " </child>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsGroup\">\n" + " <property name=\"title\">Zoom</property>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">plus equal</property>\n" + " <property name=\"title\">Zoom in</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">minus underscore</property>\n" + " <property name=\"title\">Zoom out</property>\n" + " </object>\n" + " </child>\n" + " <child>\n" + " <object class=\"GtkShortcutsShortcut\">\n" + " <property name=\"accelerator\">question</property>\n" + " <property name=\"title\">Show this help</property>\n" + " </object>\n" + " </child>\n" + " </object>\n" + " </child>\n" + " </object>\n" + " </child>\n" + " </object>\n" + "</interface>\n"; static void _action_shortcuts(GSimpleAction *p_a, GVariant *p_v, gpointer p_data) { |
