From 27daed83230eaefd0f41461cad20bbed7d1ad575 Mon Sep 17 00:00:00 2001 From: srdusr <99972264+srdusr@users.noreply.github.com> Date: Fri, 15 May 2026 19:05:00 +0200 Subject: Fix the maximize border on the path that actually runs, and three spawn faults The maximize border was still drawn because the earlier fix landed on the wrong branch. udev/render.rs has three border blocks: the SRDWM_GPU=1 path at the top and two Pixman ones below. The patch replaced the first match in the file, which is the GPU branch a real DRM session never runs. All four sites across both backends are now gated on !maximized. The verification had failed twice for a separate reason: winit/capture.rs did not draw border strips at all, so a screenshot could never answer "is there a border here" and the control passed for the wrong reason. Border strips are now drawn into that pass as solid fills - corner rounding is not reproduced, so a capture is not pixel-exact at the corners, but presence, position, thickness and colour are. With that closed the test has a real control: unmaximized gives 6 accent pixels at x=800..805, exactly the configured border_width, and maximized gives none at the right edge or along the top row. That proves the winit path; the Pixman path is the same change at two more sites and is not separately confirmed on screen. Windows spawning as squares, partly off-screen, and always on the left were all SmartPlacement::grid. It returned size.min(cell), shrinking every window to its grid cell whatever size it asked for; it scanned cells in reading order and took the first free one, which is the leftmost; and nothing clamped the result, so a window larger than its cell could hang off the edge with its border out of view. The cell now decides only where a window goes, the scan starts from a rotating cell, and both grid and cascade clamp into the usable area. Four tests, one per reported symptom. 525 tests pass, clippy clean. --- crates/wayland/src/udev/platform.rs | 1 + crates/wayland/src/udev/render.rs | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'crates/wayland/src/udev') diff --git a/crates/wayland/src/udev/platform.rs b/crates/wayland/src/udev/platform.rs index ea2260e..8dad7c3 100644 --- a/crates/wayland/src/udev/platform.rs +++ b/crates/wayland/src/udev/platform.rs @@ -268,6 +268,7 @@ impl UdevPlatform { rounded_content_buffers: HashMap::new(), border_side_buffers: HashMap::new(), snap_preview_buffers: Vec::new(), + capture_border_buffers: Vec::new(), color_filter_buffers: HashMap::new(), last_synced_size: HashMap::new(), provisional_size: HashSet::new(), diff --git a/crates/wayland/src/udev/render.rs b/crates/wayland/src/udev/render.rs index 3bd9a52..9992b2c 100644 --- a/crates/wayland/src/udev/render.rs +++ b/crates/wayland/src/udev/render.rs @@ -668,7 +668,14 @@ impl CompState { // instead, since `custom_elements` composites earlier- // pushed entries over later ones - exactly backwards // from what this overlap needs. - if w.border_width > 0 { + // No border on a maximized window - see the matching + // gate on the GPU path above. This is the Pixman path, + // the one a real DRM session actually runs: the earlier + // fix landed only on the GPU branch, so the border kept + // being drawn on real hardware and was reported again as + // "i still see the border or at least the top border + // when maximized". + if w.border_width > 0 && !w.maximized { let strips = decoration::border_strips(frame, w.border_width); // Strip 0 (top) rounded on its own two corners - see // `render_border_top`'s own doc comment - so it's a @@ -773,7 +780,7 @@ impl CompState { // (unlike the bottom strip) *do* need cropping against // this same top/bottom-strip overlap, a real bug this // comment used to claim didn't exist here at all. - if w.border_width > 0 { + if w.border_width > 0 && !w.maximized { let color = crate::state::effective_border_color(w.border_color, focused == Some(id), self.wm.borrow().theme.border_inactive_dim); let strips = decoration::border_strips(frame, w.border_width); // Strip 1 (bottom), the top strip's own mirror -- -- cgit v1.2.3