Skip to content

v2.14.1 — overlay rendering overhaul

Choose a tag to compare

@haxllo haxllo released this 15 Aug 16:53
· 670 commits to master since this release

Overlay rendering overhaul: typing no longer re-renders or resizes the window — rows reconcile in place, and the window follows content instantly without acrylic flash. Also fixes folders missing from search results (cache-fallback retention bug) and makes accent color/theme changes apply on next open.

Issues (checklist — completes step 2)

  • Folders never appear in search results → cache-fallback compaction retained only the first 5000 DB rows (ORDER BY id = files before folders), starving folders entirely; folders now retained first. Index-corruption loops made diagnosable (open/reset/commit logging).
  • Typing causes visible re-renders/window changes → keyed row reconciliation reuses unchanged rows; at most one resize per frame, applied after paint.
  • Acrylic visible for a moment during window resize → WebView viewport pinned at max height (pre-rasterized); growth reveals painted pixels, shrink does zero WebView work.
  • Window lags behind content when results reduce (apps-only grid) → shrink/small-grow resize applied immediately; no 350ms settle gap.
  • Seeing the desktop behind nex for ~1s when typing the first letter → quick-launch rows stay visible during the first search; results replace them atomically (no shrink-to-search-bar gap).
  • Accent color / theme change in Windows settings not picked up → re-detected on every show, acrylic tint re-applied while hidden.
  • Footer hints off-center (power button offset) + power icon misaligned → hints absolutely centered; power button vertically centered.
  • Right-click on folder rows showed Run as Administrator; empty divider lines in context menu → runas hidden on folders; dividers auto-hide.
  • Pin/unpin bookmark icon only updated after a re-render; Copy Path refreshed the whole results list → status-only pushes (ApplyStatus) for pure messages; pin/unpin/add use status+refresh.
  • Wrong icon glyph flashes before the real icon loads → blank transparent cold-cache slot; pop-in gated on real src swap.
  • Quick-launch items animate (stagger) on every show → QL rows excluded from entrance stagger.
  • (earlier, unreleased) Outside-click on desktop didn't hide instantly → WH_MOUSE_LL click-outside detection; grid arrow-key navigation; Painted show gate (no window resurrection after click-away).

Changelog (21 commits since v2.14.0)

Performance

  • No-resize typing: keyed row reconciliation (role|kind|title|subtitle|icon stable keys) — unchanged <li> nodes reused in place, no image re-decode, no entrance re-animation on surviving rows.
  • Zero-flash resize: WebView viewport pinned at MAX_HEIGHT — the window clips a pre-rasterized surface, so grow/shrink never exposes the acrylic backdrop.
  • Immediate resize: shrink and small-grow apply instantly (settle timers removed — pre-rasterization made them unnecessary); lastH dedupe keeps ≤1 resize per frame.
  • Icon pipeline: blank 1px-GIF cold-cache slot (no wrong-glyph flash), pop-in animation gated on real src swap, reduceMotion respected.

Bug Fixes

  • Folders missing from search: compaction retained files before folders (row-id order) — folders now retained first, then files fill remaining cache slots.
  • First-keystroke desktop peek: quick-launch rows no longer hide instantly on typing (leftover pre-reconciliation hack) — window holds its height through the first search.
  • Window lag on result reduction: 350ms shrink settle removed — window follows content instantly (apps-only grid shrinks included).
  • Acrylic flash on resize: viewport pre-rasterization (above) — was the blank-WebView → backdrop show-through.
  • Stale accent/theme: re-detected in the Show handler; acrylic tint re-applied while invisible.
  • Selection/context actions on reused rows: handlers read live dataset.index + current row snapshot.
  • Pin/unpin icon staleness: set_status_text_and_refresh pushes full state for pin/unpin/add; pure status messages use lightweight ApplyStatus (Copy Path no longer re-renders results).
  • Context menu: Run-as-admin hidden on folders; dividers auto-hidden when adjacent sections empty.
  • Tantivy diagnosability: open-failure, reset, and committed-doc logging.
  • (earlier, unreleased): click-outside instant hide (WH_MOUSE_LL), 450→150ms deferred-hide cut, grid arrow-key navigation, Painted show gate.

Architecture

  • Sizing pipeline simplified: JS measures once per render, posts immediate:true; host applies synchronously and re-asserts the oversized viewport after wry's WM_SIZE snap.

Commit Log

  • 4b43099 fix(overlay): re-detect accent color + theme on every show
  • 26bdadf fix(overlay): keep quick-launch rows visible during first search - no shrink gap
  • 695bf6b style(overlay): true vertical centering of power button in footer
  • 450bd50 style(overlay): absolutely center footer hints - power button no longer offsets the hint group
  • b8efc0b fix(overlay): immediate shrink/small-grow resize - no window lag behind content
  • df33d78 fix(overlay): pre-rasterize WebView viewport at max height - kills acrylic flash on resize
  • b4315c2 perf(overlay): keyed row reconciliation + stable window height during typing
  • 6c747fb fix(overlay): folder retention in cache fallback, tantivy hardening, context menu polish, lightweight status pushes
  • 60dad1f fix(overlay): drop publisher from grid tiles, shrink to 96px - kills empty-gap look
  • ecfd1a6 fix(overlay): grid title min-height caused name-publisher gap - bottom-anchor label block instead
  • 1ea8682 fix(overlay): uniform grid tile height 112px - square vs tall variance from content-driven rows
  • 32e6633 fix(overlay): grid titles nowrap clipped long names - 2-line clamp + min-height for row alignment
  • ae069b0 fix(overlay): grid tile hover lift clipped by list scroll container top edge - use border+bg hover, add grid top padding
  • 51e7d06 feat(overlay): high-batch design polish - selection transition, row entrance stagger, grid tiles, system accent, theme apply fix
  • 48300d9 docs: design quality audit
  • 0c49228 fix(overlay): Painted show gate - don't resurrect window after click-away during show window
  • 061c1ef feat(overlay): WH_MOUSE_LL click-outside detection - instant hide on real clicks, flap-proof
  • 2e5cc9d fix(overlay): cut deferred outside-click hide delay 450ms -> 150ms - no perceptible freeze
  • a78b3be fix(overlay): grid arrow-key navigation + deferred hide on outside click during focus grace
  • e1958c4 chore: work in progress

Binary