summaryrefslogtreecommitdiff
path: root/src/window.h
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-12 21:13:45 +0300
committerPaul Buetow <paul@buetow.org>2026-07-12 21:13:45 +0300
commit89727590e718d3628a0847689182e896df646b8a (patch)
tree3106397d1b041d95ecfc04762548261f9d660d62 /src/window.h
parent198b0e8112905bc003f954fc9159cc3da2dfce09 (diff)
walkdir: navigator, shortcuts, window wiring, drop target, tests (ht0)
M2 (task ht0): walk the directory. - src/navigator.{c,h}: GObject (no GtkWidget) holding the folder listing — image-MIME filter + extension fallback, hide-RAW-sidecars (decision #33), sort name/time/size, cursor + prev/next/wrap, path-based marks (survive re-sort, pruned on rescan/monitor, cleared on remove), nearest-fallback, GFileMonitor debounced 250ms (decision #28), 'changed' signal. 92% gcov. - src/shortcuts.{c,h}: GtkShortcutController (MANAGED) binding h/l/Left/Right/ g/G/o/q to win.* actions; one table all milestones add to. - src/window.{c,h}: open file->parent+current / folder->first; h/l/g/G actions -> nav -> load -> viewer; single GCancellable last-write-wins (g_file_equal guard for M3 async); header title 'filename · n/total'; GtkDropTarget (GDK_TYPE_FILE_LIST, many->first, decision Z); GtkFileDialog open. - data/gschema: add hide-raw-sidecars key. - tests: unit test_navigator (12 subtests), integration test_walk_folder (temp fixtures walk + ./sample-images skip-if-absent). 8/8 green; ASan clean (GIO_USE_VFS=local in fixtures_env). Fixed during this milestone: a UAF (borrowed c_name used after unref), a cancellable double-ref leak, time::modified UINT64 vs INT64, and several test-harness leaks. Sub-agent review issues addressed (mark pruning on rescan/monitor, remove-before-cursor test, recursive temp-dir cleanup, callback _cb naming, connect-before-mutate).
Diffstat (limited to 'src/window.h')
-rw-r--r--src/window.h21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/window.h b/src/window.h
index 5261a8f..10612db 100644
--- a/src/window.h
+++ b/src/window.h
@@ -6,9 +6,9 @@
*
* GgazeWindow : GtkApplicationWindow owns the layout: an AdwHeaderBar and a
* GtkStack with two children (`grid`, `large`). The grid child is a placeholder
- * until M7; the large child is the GgazeViewer (M1). The window remembers the
- * current GFile so later milestones can build on it. See
- * docs/architecture.md "Responsibilities / window".
+ * until M7; the large child is the GgazeViewer (M1). M2 adds a Navigator over
+ * the current folder, a single GCancellable (last-write-wins), keybinding
+ * shortcuts, and a file/folder drop target. See docs/architecture.md.
*
* Copyright (c) 2026 ggaze contributors
* SPDX-License-Identifier: GPL-3.0-or-later
@@ -27,10 +27,17 @@ G_DECLARE_FINAL_TYPE(GgazeWindow, ggaze_window, GGAZE, WINDOW,
/* Construct a new window attached to p_app. */
GgazeWindow *ggaze_window_new(GgazeApp *p_app);
-/* Remember p_file as the current file (or folder) and title the window with
- * its basename. The GFile reference is held until replaced or the window is
- * destroyed. Real file-vs-folder handling lands in M2. */
-void ggaze_window_open(GgazeWindow *p_win, GFile *p_file);
+/* Open p_arg (a file or a folder): for a file, list its parent folder with
+ * p_arg current; for a folder, list it with the first image current. Loads the
+ * current image into the viewer and switches the stack to "large". */
+void ggaze_window_open(GgazeWindow *p_win, GFile *p_arg);
+
+/* Navigation over the current folder (bound to h/l/Left/Right/g/G via
+ * shortcuts.c). No-ops if nothing is open. */
+void ggaze_window_prev(GgazeWindow *p_win);
+void ggaze_window_next(GgazeWindow *p_win);
+void ggaze_window_first(GgazeWindow *p_win);
+void ggaze_window_last(GgazeWindow *p_win);
G_END_DECLS