Repository navigation
fix(columns): share the right pane between child columns and the preview - #1405
Conversation
Keyboard mirroring appended the child column inside the columns scroller beside the reserved preview slot, so at the slot's minimum width every folder/file step scrolled the focused column back and forth. The empty slot now lends trailing columns their width, the preview geometry counts only the navigated columns, and a focused folder hides the drawer instead of showing a placeholder. An explicit close marks the drawer dismissed so the keyboard mirror stops reopening it, a pointer preview closes deeper columns first, and column reveals keep one constant peek sliver instead of a viewport-dependent budget. Refs #1404
Nothing is reserved for a peek sliver any more: the preview takes what remains beside the focused column, and column reveals use one rule that aligns the strip with the right pane without scrolling past the focused column. A trailing child that does not fit the lent slot is clipped instead of moving the focused column. A divider position pinned by a narrow window is no longer recorded as the user's sidebar width; the preview is sized against the intended width and the sidebar is restored once the content has room. Refs #1404
Windows too narrow for a preview hid the reserved slot, so the mirrored child column extended the scroller and closing it let GTK clamp the offset. The slot now shrinks to whatever remains beside the focused column and only the preview content hides below its threshold. A narrower viewport reveals a clipped focused column immediately, and a divider position pinned by the window is judged by the pane's own geometry so a stale child allocation cannot record it. Refs #1404
Switching Appearance → Preview panel off while nothing was previewed left the keyboard mirror free to reopen the panel on the next previewable file, re-reserving the space and shifting the columns. Refs #1404
Replace added geometry assertions with manual verification, remove the event-setter echo test, and audit all added comments. Retain folder/file lifecycle, dismissal, pointer preview ordering, and archive key-routing coverage. Refs #1404
HandoffBranch Commits
Validation
Open items
Manual check (also in the doc): Columns, defaults, Right three or four times into nested folders until the preview slot is at its minimum, then Up/Down across folders and files. The focused column must not move; the right pane alternates between the child column and the preview. Space closes the preview and Down must leave it closed; Space reopens it. Appearance → Preview panel off must also stay off while stepping onto files. |
Bind the GTK fixture to a Columns view so the initial reservation is present while the drawer is disabled. Keep startup release and content dismissal as distinct E2E input routes; remove duplicate layout assertions. Refs #1404
|
Reviewed and pushed merge preparation, without merging the PR:
Pinned rootless-Podman validation, with private displays/buses: Manually inspected current captures at widths 1440, 820, and 500: the focused column stays put, folder/file selection exchanges the right pane, narrow preview content hides, and dismissal survives selection. Visual evidence pending: attachment-upload tooling is unavailable. Please upload these files through GitHub's editor; no media was committed. All are under
All required checks are green on Author handoff reconciled: independently reproduced #1406 on the fetched main baseline (focus moved from |
This comment has been minimized.
This comment has been minimized.
Replace fixed 80 ms delays with the existing bounded menu-condition helper. Preserve hot-plug, unplug, reopening, navigation, and subscription-lifetime assertions. This fixes the source-entry race reproduced from PR 1405 CI attempt 2. Refs #1404
Description
In Columns, keyboard mirroring appended the child column inside the columns scroller beside the reserved preview slot. Once the window was deep enough that the slot sat at its minimum width, every Up/Down onto a folder scrolled the columns left to fit the child, and every Up/Down onto a file closed the child and let GTK clamp the scroll back. The focused column bounced by one column width on every keypress.
The area right of the focused column is now one right pane shared by the child column and the preview:
i, Esc, close button, Appearance → Preview panel) stays closed while keyboard mirroring continues, until it is opened explicitly again. Previously a Down onto the next previewable file reopened it.reveal_columnmeasures the viewport one frame later, after the slot has resized for the new active column, so entering a mirrored child column scrolls it into view instead of leaving it clipped.wait_for_directorysettles the pane it waited for, andview_modewaits for a pane instead of asserting on a transient empty tree after a window resize.The complete sizing, reservation, dismissal, and peek-strip rules now live in
docs/preview-panel-layout.md, with the owning test for each rule, so later changes have a contract to check against.Visual evidence
Pending: the owner will upload the before/after captures through the GitHub editor.
level3column left and clipped the child beside the placeholder.level3stays in place and thebranchchild column takes the preview's space.level3still in place with the preview meeting its right edge.How to test
Expected result: In step 3 the focused column never moves; the right pane alternates between the child column and the preview, both starting at the focused column's right edge. In step 4 the preview stays closed after Down and reopens on Space, after which it follows the selection again. In step 5 the deeper columns close and the preview opens beside the clicked file's column.
Related issue
Closes #1404