Harden navigation/camera/scene, fix Quick Look and classification, align top bar #1

Merged
bnied merged 0 commits from refs/pull/1/head into main 2026-06-06 17:05:19 +00:00
bnied commented 2026-06-06 17:00:34 +00:00 (Migrated from codeberg.org)

Navigation (BrowserViewModel): guard scans with a generation counter so a
slower earlier scan can't overwrite a newer navigation or clear the
scanning spinner early; history truncates to the target on breadcrumb/back
navigation instead of always appending; scan once when opening a folder.

Fly camera (FlyCameraController): interrupting a framing flight recovers
the live orientation instead of snapping to a stale angle; a flight token
invalidates the deferred completion; held movement keys are released when
the window loses focus; pressing a movement key cancels an in-flight fly.

Scene (SceneHostView): the key-event monitor only handles events for its
own window (no multi-window cross-talk); a path->node index replaces
full scene-graph walks on selection/focus; interactive nodes carry a typed
NodePayload instead of string-keyed KVC values; Quick Look is driven
through the responder-chain control protocol with a live data source.

Filesystem (FileSystemScanner/FileSystemNode/SceneBuilder): unreadable
directories are marked and labelled 'permission denied' rather than shown
as empty. FileKind: dotfiles classify as hidden even when they have an
extension (e.g. .eslintrc.json).

Removed the QuickLookPreview singleton and the unused Theme.displayItalic.

Layout: top bar and sidebar header top insets adjusted so the bar lines up
with the sidebar in windowed mode.

Moved ContentView to UI/ and BrowserViewModel to Model/.

Navigation (BrowserViewModel): guard scans with a generation counter so a slower earlier scan can't overwrite a newer navigation or clear the scanning spinner early; history truncates to the target on breadcrumb/back navigation instead of always appending; scan once when opening a folder. Fly camera (FlyCameraController): interrupting a framing flight recovers the live orientation instead of snapping to a stale angle; a flight token invalidates the deferred completion; held movement keys are released when the window loses focus; pressing a movement key cancels an in-flight fly. Scene (SceneHostView): the key-event monitor only handles events for its own window (no multi-window cross-talk); a path->node index replaces full scene-graph walks on selection/focus; interactive nodes carry a typed NodePayload instead of string-keyed KVC values; Quick Look is driven through the responder-chain control protocol with a live data source. Filesystem (FileSystemScanner/FileSystemNode/SceneBuilder): unreadable directories are marked and labelled 'permission denied' rather than shown as empty. FileKind: dotfiles classify as hidden even when they have an extension (e.g. .eslintrc.json). Removed the QuickLookPreview singleton and the unused Theme.displayItalic. Layout: top bar and sidebar header top insets adjusted so the bar lines up with the sidebar in windowed mode. Moved ContentView to UI/ and BrowserViewModel to Model/.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
spaceduck/neofsn!1
No description provided.