KISS image preview/viewer for GNOME.
  • C 96.1%
  • Meson 3.6%
  • Roff 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Paul Buetow ce5e7ab42e Fix minimal CI lane (gegl=disabled): move _proceed_* out of the GEGL guard
The _proceed_prev/next/first/last helpers are trivial wrappers over the
public ggaze_window navigation API and do not depend on GEGL, but were
defined only inside the #if GGAZE_HAVE_GEGL block. The always-compiled
_action_prev/next/first/last handlers reference them via _maybe_save_then,
so the gegl=disabled (minimal) lane failed with '_proceed_prev undeclared'
(regression introduced by the enhance save-dialog commit, before M8 marks).
Move the four helpers out of the GEGL guard so they are always compiled.

Verified: meson setup build-min -Dgegl=disabled -Djxl=disabled -Davif=disabled -Dheif=disabled && ninja -C build-min && meson test -C build-min (23/23 OK); default gegl=enabled lane still 24/24 OK.
2026-07-22 11:16:03 +03:00
.woodpecker ci: install libasan+libubsan in the ASan lane (kt0) 2026-07-12 17:52:56 +03:00
data polish: AppStream, man page, RPM spec, full lifecycle test (yt0) 2026-07-14 14:55:24 +03:00
docs Integrate navigator marks into window and grid UI (M8) 2026-07-22 11:04:05 +03:00
packaging polish: AppStream, man page, RPM spec, full lifecycle test (yt0) 2026-07-14 14:55:24 +03:00
po bootstrap: meson build, test harness, CI, conventions, README/AGENTS (et0) 2026-07-12 17:20:15 +03:00
src Fix minimal CI lane (gegl=disabled): move _proceed_* out of the GEGL guard 2026-07-22 11:16:03 +03:00
tests enhancer: test stale pre-existing destination export (ku0) 2026-07-22 11:14:08 +03:00
.clang-format bootstrap: meson build, test harness, CI, conventions, README/AGENTS (et0) 2026-07-12 17:20:15 +03:00
.editorconfig bootstrap: meson build, test harness, CI, conventions, README/AGENTS (et0) 2026-07-12 17:20:15 +03:00
.gitignore add sample images to gitignores 2026-07-12 17:34:29 +03:00
AGENTS.md showimage: loader, detect, viewer widget, EXIF orientation, tests (gt0) 2026-07-12 17:51:22 +03:00
ggaze-config.h.in bootstrap: meson build, test harness, CI, conventions, README/AGENTS (et0) 2026-07-12 17:20:15 +03:00
LICENSE bootstrap: meson build, test harness, CI, conventions, README/AGENTS (et0) 2026-07-12 17:20:15 +03:00
meson.build gegl: enhancer presets + export, LSAN suppressions (wt0) 2026-07-14 14:50:21 +03:00
meson_options.txt progressive: libjpeg-turbo two-phase JPEG backend (st0) 2026-07-14 08:49:12 +03:00
README.md bootstrap: meson build, test harness, CI, conventions, README/AGENTS (et0) 2026-07-12 17:20:15 +03:00

ggaze — GNOME Gaze

A small, fast, native image viewer for Fedora Linux, written in C with GTK4. Its job: quickly preview a folder of pictures downloaded from a camera, cull the rejects, move on. Think feh / nsxiv / qiv, but GNOME-native and KISS — no library, no database, no sidecars. The layout nods to gthumb (header bar, thumbnail grid, full-window viewer) without the weight.

Status: planning → skeleton. The design is complete in docs/; the implementation is just starting. Not usable yet.

Quick start

ggaze ~/Downloads/Camera/IMG_0001.jpg

Opens the folder as a thumbnail grid, Enter drops into the large view, and you flip through the shoot:

Key Action
h / l, / previous / next image
Enter / Esc grid ↔ large view (t toggles)
+ / - zoom in / out (large) · grow / shrink thumbnails (grid)
0 zoom fit ↔ 100% (large) · reset thumbnail size (grid)
i info overlay (EXIF)
v / V / Ctrl+a mark / range-mark / mark all
d / D trash to ./Trash (undoable) / delete permanently
u undo last d or m
m move marks → destination popup (1, 2, …)
e open in external program popup
! run a shell script popup
a quick GEGL enhance popup (optional)
c / R / [ / ] crop / straighten / rotate 90° (GEGL, optional)
s save an enhanced/edited copy (original is never modified)
Space (hold) compare original vs modified
f / S fullscreen / slideshow
o open file/folder dialog
, preferences
? shortcuts overlay
q quit

Full keybindings and mouse/touch gestures: docs/ui-and-interactions.md.

Build

meson setup build
ninja -C build
meson test -C build          # all tests
meson test -C build --suite unit
meson test -C build --suite integration

A minimal build (GdkPixbuf-only, no GEGL) is valid and fast:

meson setup build -Dgegl=disabled -Djxl=disabled -Davif=disabled -Dheif=disabled

Enable optional backends with the matching feature option (auto by default):

meson setup build -Dgegl=enabled

Coverage (plain-C modules, ≥80% target):

meson setup -Db_coverage=true build-cov
ninja -C build-cov
meson test -C build-cov
ninja -C build-cov coverage     # needs lcov + genhtml

Dependencies (Fedora)

meson ninja-build gcc pkgconf-pkg-config
gtk4-devel glib2-devel libadwaita-devel
# optional:
gegl-devel babl-devel   libjxl-devel   libavif-devel   libheif-devel

Documentation

The full design lives in docs/:

Contributing and agent workflow: see AGENTS.md.

License

GPL-3.0-or-later. See LICENSE.