aboutsummaryrefslogtreecommitdiffstats
path: root/docs/roadmap.md
diff options
context:
space:
mode:
authoruser <user@clank>2026-08-13 19:39:18 +0200
committeruser <user@clank>2026-08-13 19:39:18 +0200
commitae726b5bb3ff8e9e8f2bef0e9fbc9d4dcb62a79e (patch)
treea6cc3f56559c05b812d6bf6998d2b768c8672162 /docs/roadmap.md
parentbuild: cut the edit loop from 52s to 5s with more codegen units (diff)
downloadsl0ppi-ae726b5bb3ff8e9e8f2bef0e9fbc9d4dcb62a79e.tar.gz
sl0ppi-ae726b5bb3ff8e9e8f2bef0e9fbc9d4dcb62a79e.tar.xz
sl0ppi-ae726b5bb3ff8e9e8f2bef0e9fbc9d4dcb62a79e.zip
sl0p: make the split button work on stacked panes too
Reported still dead on a live session after the previous fix. Stacks move the frame twice more, and neither move was in the hit-test: - a stack list is drawn over the top rows of its visible member, pushing that pane's frame down. The renderer applies this as a frame geom override (reserved_top_rows); the click side did not, so every pane in a stack was clickable one row above its own title. frame_rect_with_top_reserved() now applies the same shift, before the gap inset, in the same order as render; - a stack's collapsed members drew a button on their one-row title. Nothing could honour it -- that row is the stack's picker, and "split the pane that is not on screen" is not a thing to ask anyway. They no longer draw one, and the click side mirrors the condition. 120 snapshot lines change, every one of them a one-liner losing its button and nothing else (same width, same content otherwise; audited mechanically). Both confirmed by reintroducing each bug and watching the check fail. A third candidate fix -- resolving a click to the stack's visible member, on the theory that get_pane_at could return a collapsed sibling -- turned out to be unnecessary: collapsed members have one-row geoms, so position lookup already lands on the right pane. Removed rather than kept "just in case". The check itself was wrong twice before it was right, in the direction that matters most (reporting failures that were its own): it now reads until the pty goes quiet instead of for a fixed time, and parses only a freshly forced repaint, so a half-arrived screen cannot look like a button drawn where it is not. It clicks every button it can see, and runs against config/config.kdl as well, whose stacks the minimal config never had. When the two disagree, the server's own log settles it: log::info! in intercept_split_button_click, read /tmp/sl0ppij-$UID/sl0ppij-log/.
Diffstat (limited to 'docs/roadmap.md')
-rw-r--r--docs/roadmap.md23
1 files changed, 17 insertions, 6 deletions
diff --git a/docs/roadmap.md b/docs/roadmap.md
index cf7692c..9afed17 100644
--- a/docs/roadmap.md
+++ b/docs/roadmap.md
@@ -228,11 +228,15 @@ to hide it:
- the title was budgeted before the button, so a title longer than the frame
(i.e. any shell showing a path) consumed its columns;
- the click hit-tested the pane's allocation while the frame is drawn inset by
- the pane gap, putting the clickable columns two to the right of the glyph.
+ the pane gap, putting the clickable columns two to the right of the glyph;
+- and, found after that shipped, stacks move the frame twice more: a stack list
+ pushes the visible member's frame down by its reserved rows, and the collapsed
+ members drew a button on a one-row title that nothing could ever honour.
The first three are fixed in `ui/pane_boundaries_frame.rs` by reserving the
anchored button before anything else and never discarding the right side; the
-fourth by `Pane::frame_rect()`, the rect the frame is actually drawn in.
+rest by `Pane::frame_rect_with_top_reserved()`, the rect the frame is actually
+drawn in, and by not drawing a button on a stack's collapsed members.
**How to re-run the check** -- unit tests were necessary and insufficient here
for the fourth time, so this one reads the screen:
@@ -241,10 +245,17 @@ for the fourth time, so this one reads the screen:
make check-live # packaging/checks/split-button-live.py
```
-It starts a session at a pty with the live frame config, finds the `+` on the
-frame, attaches a second client (the middle builder), and clicks the columns the
-glyph was found in, expecting `2 -> 3` panes. Confirmed to fail on the commit
-before the fix, for both the render and the click.
+It starts a session at a pty, finds the `+` on the frame, attaches a second
+client (the middle builder), splits and stacks, then clicks every button it can
+see and expects one new pane per click. It runs twice, with a minimal config and
+with `config/config.kdl` -- the real one, whose stacks are where the second
+round of bugs was. Every fix was confirmed by reintroducing it and watching the
+check fail.
+
+If it ever disagrees with the code, do not theorise about the screen: put a
+`log::info!` in `intercept_split_button_click` and read
+`/tmp/sl0ppij-$UID/sl0ppij-log/`. The server's own geometry settles in one run
+what screen-scraping cannot.
## Standing risks