noframe: drop the drag-by-surface -- it is a finishing step, not a mode
Author's correction to the shape of yesterday's option. The intended workflow is: place the displays where you want them WITH their frames, quit, then edit glass_layout.cfg to turn the frame off. So a ,noframe window should be pinned, not draggable -- removed the WM_NCHITTEST -> HTCAPTION handler that made the surface a drag handle. The arrangement being finished is the point: with no caption there is nothing to drag it by, which is exactly what you want on a wall of monitors. Delete the flag to get the frame (and the dragging) back. Unchanged and still needed: SaveLayout writes the flag back, because any later drag of a FRAMED window rewrites the whole file and would otherwise strip it. Re-verified live: - Heat MFD comes up with WS_CAPTION clear and answers WM_NCHITTEST on its surface with HTCLIENT (pinned) -- no window reports HTCAPTION any more. - Comm MFD (unflagged) keeps its caption. - A framed window's WM_EXITSIZEMOVE rewrote the file and BOTH ,noframe flags survived, with the new header explaining the arrange-first workflow. - surround / exploded / pod / dev boot and simulate clean. Docs updated to describe the two-stage workflow rather than surface dragging: the file's own header, environ.ini's BT_GLASS_LAYOUT block, context/ glass-cockpit.md and the ledger (which records the removed behaviour so the next reader does not re-add it). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+16
-7
@@ -777,13 +777,22 @@ Options are comma-separated after the four numbers and unknown ones are IGNORED,
|
||||
reading a newer file loses the option but never the line (the bindings.txt grammar rule applied
|
||||
here). Hand-edited; the file is otherwise machine-written.
|
||||
|
||||
### The two things that would have made it a trap
|
||||
1. **A frameless window has no title bar to drag** -- which is the entire point of the sticky
|
||||
layout. So a noframe window is dragged BY ITS SURFACE: `WM_NCHITTEST` returns `HTCAPTION`
|
||||
anywhere that is not a button and `HTCLIENT` over one. Buttons stay clickable, and because
|
||||
Windows drives the move, the drag still ends in `WM_EXITSIZEMOVE` -- so it still SAVES.
|
||||
2. **SaveLayout rewrites the whole file**, so it writes the flag back. Without that the first
|
||||
finished-drag after adding the option would have silently stripped it.
|
||||
### The workflow is two-stage, on purpose
|
||||
Arrange FIRST, strip chrome LAST:
|
||||
1. run with `BT_GLASS_LAYOUT=save` and drag the windows where you want them (they have title
|
||||
bars -- this is just the normal sticky-layout flow),
|
||||
2. quit,
|
||||
3. hand-edit the cfg and append `,noframe` to the ones you want bare.
|
||||
|
||||
From then on those windows come up frameless AND PINNED -- with no caption there is nothing to
|
||||
drag them by, which is the point: the arrangement is finished. Delete the flag to re-frame.
|
||||
|
||||
(An earlier cut made noframe windows draggable by their surface via `WM_NCHITTEST`->`HTCAPTION`.
|
||||
Removed at the author's direction: it is not an interactive mode, it is the finishing step.)
|
||||
|
||||
The one thing it must not do is eat itself: **SaveLayout rewrites the WHOLE file** -- any later
|
||||
drag of a FRAMED window triggers it -- so it writes the flag back for every window that carries
|
||||
one. Without that, the first drag after adding the option would silently strip it.
|
||||
|
||||
### Ordering
|
||||
The flag is read BEFORE frame sizing (`LoadLayout(quiet)` pre-pass, then the normal pass after
|
||||
|
||||
Reference in New Issue
Block a user