You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Quick Look: native ⇧Space preview + Finder-convert hint
- ⇧Space opens `QLPreviewPanel` over Cmdr; cursor-follow keeps the preview tracking the focused pane's selection (100 ms trailing-edge debounce + generation counter, same pattern as type-to-jump)
- Backend `QuickLookController` is a `Mutex<...>` singleton driving the AppKit shared `QLPreviewPanel`. All AppKit calls hop to the main thread via `app.run_on_main_thread()` + `mpsc` channel, same pattern as `clipboard/pasteboard.rs`. First codebase use of `define_class!` (`MainThreadOnly` NSObject) — documented in the new `src-tauri/src/quick_look/CLAUDE.md`
- Panel becomes key (no supported `orderFront:` mode). Key forwarding: panel delegate's `previewPanel:handleEvent:` emits a `quick-look-key` Tauri event for arrows / typing / ⇧Space; the frontend listener calls `explorerRef.routePanelKey(payload)`, which fans out to the focused pane's existing nav primitives. Esc returns NO so AppKit's native close path handles it, surfacing via the `NSWindowWillCloseNotification` observer
- Volume gate via `Volume::supports_local_fs_access()` — MTP and virtual git portal entries silently no-op (debug log under `target: "quick_look"`); never `Path::exists()`-based, because MTP paths look real
- Three IPC commands replace the old fire-and-forget `quick_look`: `quick_look_open`, `quick_look_set_path`, `quick_look_close`. Bindings regenerated
- Menu accelerator updated `Some("Space")` → `Some("Shift+Space")`. FilePane Space handler guarded with `!e.shiftKey`. JS shortcut path also has `⇧Space` on `file.quickLook`. Empirically both fire per keystroke (AppKit menu + WKWebView keydown), so the dispatcher arms a 200 ms `quickLookDispatchGuard` on entry and swallows the second fire
- Focus-watchdog teaches itself about the panel: while `quickLookState.isOpen`, `shouldSuppress()` returns true (panel-is-key by design — the warning was a known not-a-bug)
- Educational toast for Finder converts: pressing plain Space in the file list pops a persistent info toast explaining Space-vs-⇧Space + a deep link to Settings > Keyboard shortcuts. The toast reappears on each Space press as a gentle reminder until the user clicks "Don't show again" (flips `fileExplorer.suppressQuickLookHint` in Settings > Advanced) or while the toast is already on screen. The X button just closes the instance, not the future ones — matching the user's intent
- Tests: 9 Rust controller state-machine tests, 20 Vitest tests (`quick-look-state`, `quick-look-hint`, `QuickLookHintToastContent.a11y`), 1 new `focus-watchdog` suppression case. Manual MCP smoke procedure at `apps/desktop/test/manual/quick-look-mcp.md` (native panel is outside Playwright's reach)
- Docs: new `apps/desktop/src-tauri/src/quick_look/CLAUDE.md`, new row in `docs/architecture.md`, Selection section in `apps/desktop/src/lib/file-explorer/CLAUDE.md` updated for both the ⇧Space shortcut and the hint behavior. Plan doc at `docs/specs/quick-look-plan.md` retained for reference
0 commit comments