diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-12 17:30:26 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-12 17:30:26 +0300 |
| commit | 547b810eea19b0c72731e30ca3e2e339593c1833 (patch) | |
| tree | e19fc9308d2f93ffd1d558ec705effc6d9ffb752 /docs | |
| parent | 1770b12d5d95476310c27ccf39a91b5ba4a3f119 (diff) | |
skeleton: GtkApplication, window, GSettings schema, desktop, tests (ft0)
M0 (task ft0): the app shell — no feature views yet (those are M1 large, M7
grid).
- src/main.c: g_application_run + --version via handle-local-options (--help
is GApplication's own); exits before activate so --version works headless.
- src/app.{c,h}: GgazeApp : AdwApplication : GtkApplication (libadwaita
styling, decision #29), single-instance (decision #32),
G_APPLICATION_HANDLES_OPEN; activate + open reuse the active window
(replace-on-new-open); ggaze_window_open remembers the GFile.
- src/window.{c,h}: GgazeWindow : GtkApplicationWindow with AdwHeaderBar and a
GtkStack (children 'grid'/'large', default 'grid'); dispose clears the file.
- data/org.buetow.ggaze.desktop (image/* MIME, validated) and
data/org.buetow.ggaze.gschema.xml (all keys + defaults, --strict clean).
- meson: libggaze static lib shared by the executable and tests; install to
bindir/applications/glib-2.0 schemas; gnome.post_install compiles schemas +
updates desktop db.
- tests: unit test_app (--version/--help/unknown via subprocess), integration
test_window (offscreen stack checks + open-titles), bootstrap. 3/3 green.
- docs/tech-stack.md: window-geometry shape corrected to (width,height,
fullscreen,maximized) to match the schema.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/IMPLEMENTATION.md | 18 | ||||
| -rw-r--r-- | docs/tech-stack.md | 2 |
2 files changed, 13 insertions, 7 deletions
diff --git a/docs/IMPLEMENTATION.md b/docs/IMPLEMENTATION.md index 359511a..c2be2c3 100644 --- a/docs/IMPLEMENTATION.md +++ b/docs/IMPLEMENTATION.md @@ -144,7 +144,8 @@ green (empty suites); CI builds the matrix; `clang-format --dry-run` clean. - `src/loader/backends/pixbuf.c` — GdkPixbuf → `gdk_pixbuf_apply_embedded_orientation` (decision #26) → `GdkTexture`. - `src/viewer.c/.h` — `GgazeViewer : GtkWidget` (custom, decision #31): zoom, - pan, fit, cursor-centered zoom, pan clamp; `viewer_set_texture`. + pan, fit, cursor-centered zoom, pan clamp, `viewer_set_texture`; scroll + follows `scroll-behavior` (`zoom` / `pan-when-zoomed` / `navigate`). - `src/window.c` — wire `open` → load → `viewer_set_texture`; large view. **Tests** @@ -253,7 +254,7 @@ bounded memory. trashed/deleted; `Enter`/double-click → large; cursor sync both ways. - `src/trash.c/.h` — `./Trash` bin (lazy, collision suffix), restore-last, permanent delete. -- Window: `d`/`D`/`u`; `d` advances; counter = remaining; `t` toggle. +- Window: `d`/`D`/`u`; `d` advances; `D` on **>1 marked** asks a confirm dialog; counter = remaining; `t` toggle. **Tests** - Unit: `test_thumbnail.c`, `test_trash.c`. @@ -273,11 +274,15 @@ bounded memory. acts on original file (decision #38). - `src/runner.c/.h` — `scripts` `a(ss)`; `/bin/sh -c`, single-quoted `%f`/`%d` (decision S); `wait_async`; rescan + toast on done. -- `src/clipboard.c/.h` — `image/png` (decode in `GTask`) / `text/uri-list`; - union provider for one file (decision V). +- `src/clipboard.c/.h` — copies the **displayed** image (modified if a + preview is active, else original) as `image/png` (decode in `GTask`) / + marked files as `text/uri-list`; union provider for one file (decision V). + `Ctrl+Shift+c` (later) copies the original/path. - Reusable popover (`ggaze_popup`) for move/open/scripts/(enhance later): `(hotkey, label)` rows + key controller firing on digit/letter. - Unified one-level undo `u` (decision P). +- Mark UI: `v`/`V`/`Ctrl+a`/`Esc`; header subtitle shows `N marked`; grid + check-badges + large-view indicator. - Preferences dialog (`,`): `AdwPreferencesWindow` editing ordered `a(ss)` lists + sort/background/scroll/slideshow/hide-trashed. @@ -296,8 +301,9 @@ bounded memory. - `meson` `gegl` feature; `src/enhancer.c/.h` plain-C. - `enhancer_get_presets` (built-in programmatic / user `gegl-graph` text, decision #34); `enhancer_apply` in `GTask`; `enhancer_export` → - `<stem>-enhanced.<ext>` same dir, collision `-1`; EXIF Orientation=1 on - export (decision #26). + `<stem>-enhanced.<ext>` same dir, collision `-1`, EXIF Orientation=1 on + export (decision #26); defaults to the original format (JPEG quality 95); + a format/quality chooser and a lossless `jpegtran`/`exiftool` path are later. - Viewer: preset active → import → `GeglBuffer` → apply → `GdkTexture`; not during scrub (decision #34); "enhanced" badge. - Compose order load→enhance→rotate→straighten→crop→export (decision #35). diff --git a/docs/tech-stack.md b/docs/tech-stack.md index f8b54b3..7dc1191 100644 --- a/docs/tech-stack.md +++ b/docs/tech-stack.md @@ -70,7 +70,7 @@ it. Treat as a later milestone, but design the loader signature for it now. - `slideshow-delay` — double (seconds) - `thumbnail-size` — int: grid thumbnail pixel size (resizable via `+`/`-`) - `hide-trashed` — bool -- `window-geometry` — `(iiib)` width, height, maximized; persisted, restored on launch +- `window-geometry` — `(iiib)` (width, height, fullscreen, maximized); persisted, restored on launch - `destinations` — `a(ss)`: ordered array of `(name, path)` pairs for the `m` move popup. List order determines auto-assigned hotkeys (`1`, `2`, …). Edited via the Preferences dialog (`,`) or `gsettings`. |
