New Features
- Update MuPDF to 1.28.2 (from 1.27.2) release history
- EXIF metadata in File Properties: Image files now show EXIF tags (camera, lens, ISO, shutter, aperture, date, GPS, etc.) in the existing File Properties dialog. Uses a runtime probe of
libexif.so.12(Linux/macOS) orlibexif-12.dll(Windows) — no build-time dependency, and silently skips if libexif isn't installed. Thumbnail IFD is filtered out to avoid duplicate entries; values are truncated at 200 characters. - Donate / Support dialog: A new "Donate / Support" entry in the Help menu (also available via the
donatecommand) opens a dialog with links to Ko-fi, Liberapay, and GitHub Sponsors. The dialog is shown once on first run (tracked via a sentinel file in the app data directory).
New Features
- Crash reporter: When Lektra crashes, a dialog displays the crash log and offers a one-click button to open a pre-filled GitHub issue. The crash handler is installed at startup via
CrashHandler::install(). On Linux/macOS, fatal signals (SIGSEGV, SIGABRT, SIGFPE, SIGILL, SIGBUS) are caught; on Windows,SetUnhandledExceptionFilteris used. A stack trace is written to~/.local/share/lektra/crashes/crash_latest.log(Linux/macOS) or%TEMP%\lektra_crash.log(Windows). A forked/spawned clean process then shows theCrashReporterDialogwith the log, a "Copy to Clipboard" button, and a "Report on GitHub" button. Stack traces include function names and file/line numbers when built withRelWithDebInfoorDebug; release builds show addresses only.
Bug Fixes
-
Fix crash (SIGSEGV) when cancelling the file dialog opened via "Open File in VSplit / HSplit":
OpenFilesInVSplitandOpenFilesInHSplitpassed an empty file list to the file dialog and then unconditionally accessedqfiles[0]after it returned. When the user cancelled the dialog,qfileswas empty and the index access caused a segmentation fault. Fixed by returning early whenqfilesis empty after the dialog closes. -
Fix page gaps disappearing after scrolling in PDFs where the first page differs in size from the content pages:
cachePageStride()is called at open time when only page 0's dimensions are known; all other pages fall back tom_default_page_dim(page 0's size). If the cover or title page is a different height than the body pages, the precomputed strides are wrong and content pages overflow into the gap below them once they render. Fixed by comparing each rendered page's true stride againstm_page_offsetsinrenderPageFromImage(); if a mismatch greater than 0.5 px is detected,m_page_layout_staleis set. On the nextrenderPages()pass,cachePageStride()+repositionPages()+updateSceneRect()are re-run before visible pages are computed. For uniform-page-size documents the check is a no-op; for mixed-size PDFs it triggers at most once per newly discovered page dimension.