diff options
| author | srdusr <[email protected]> | 2026-05-04 21:37:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2026-05-04 21:37:00 +0200 |
| commit | 790ee906957b8b855dfc23cf1b206628585fd1ec (patch) | |
| tree | 2351094dede798ed8b3fa32fd8fa41641752c64b /crates/core/src/manager | |
| parent | 3ea84a31ee671b88d8c343b3007de0e975eff31c (diff) | |
| download | srdwm-790ee906957b8b855dfc23cf1b206628585fd1ec.tar.gz srdwm-790ee906957b8b855dfc23cf1b206628585fd1ec.zip | |
Support monitor split in the nested backend, correcting a wrong "blocked"
Earlier today I wrote that a nested compositor cannot produce a second
monitor because split and fake monitors "need real head machinery that only
the DRM backend has". That was inferred from both commands returning ok and
changing nothing, not read from the code, and the first half is false.
udev/platform.rs was simply the only backend draining those request queues.
The winit poll never took them off, so the request sat there forever and the
dispatch looked like it had worked. Nothing about split is DRM-bound:
MonitorSplit is bookkeeping in WindowManager and split_rect is pure geometry
in core. The winit poll now drains split requests the same way, and its
monitors() expands a split into one Monitor per part with its own
full_geometry and maximize_geometry, matching the udev expansion. Splitting
the nested output into two 640x800 monitors with a seam now works, which is
what a multi-monitor repro needs. Fake monitors stay udev-only; that half was
not re-checked and is not claimed either way.
Also corrected: the capture pass measured the shadow rect from w.geometry
while both on-screen loops measure it from effective_frame, the client's real
committed size. src indexes into a buffer rasterised at the frame's size, so
the two disagreeing reads the wrong region whenever a client settles on a
different size than it was asked for.
The seam check this was meant to unblock is still not done. With the split
working, the negative control failed: a floating window off the seam had no
shadow either. Running both clients in one instance showed Alacritty renders
a shadow in a capture and Nemo renders none, same settings, both floating,
either focus. Nemo is server-side decorated and Alacritty is not, which is a
lead and not a conclusion. Recorded in docs/TODO.md as open rather than
guessed at.
515 tests pass, clippy clean.
Diffstat (limited to 'crates/core/src/manager')
0 files changed, 0 insertions, 0 deletions