From 3d73ed0f057a555ded67ad58dbe02b36cd4d2d1f Mon Sep 17 00:00:00 2001 From: srdusr <99972264+srdusr@users.noreply.github.com> Date: Tue, 24 Dec 2024 20:44:00 +0200 Subject: Accumulate wayland-crate additions: capture rendering, focus/Space sync, VT resume, plumbing Bundles the remaining wayland-crate changes built up here, touching both backends (udev and winit) and the shared input/rendering code: - udev/capture.rs: off-screen Pixman render of an arbitrary (not necessarily on-screen) workspace's window content to a PPM file -- what crates/core's capture-request queue drives, for a workspace switcher's thumbnail previews. wlr-screencopy structurally can't do this (it can only see what an output is presenting), which is why this exists as a separate render path rather than reusing it. - input::focus_window now also raises the window in smithay's own Space, not just core's stacking order - Space is what actually renders on top and what pointer hit-testing reads, so any focus path that skipped this (an IPC "focus" dispatch, concretely) left a window genuinely focused while still rendering, and receiving clicks, underneath whatever was already topmost. Both backends' poll loops now re-sync this after any IPC mutation. - udev/session.rs's VT-switch resume fix (drains a stale pending page flip before reasserting CRTCs) already has its own earlier, cleanly isolated commit - not duplicated here. - Assorted decoration/cursor/rounded-corners/output-management/ screencopy/XWayland changes and their cross-backend wiring. Coarser than the repo's usual one-purpose-per-commit convention, deliberately - see the core-crate sweep commit's own message for why. --- crates/wayland/src/rounded_corners.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'crates/wayland/src/rounded_corners.rs') diff --git a/crates/wayland/src/rounded_corners.rs b/crates/wayland/src/rounded_corners.rs index 25fc199..4e02616 100644 --- a/crates/wayland/src/rounded_corners.rs +++ b/crates/wayland/src/rounded_corners.rs @@ -176,6 +176,18 @@ pub(crate) fn rounded_content_element( radius: f32, corners: RoundedCorners, ) -> Option { + // This module's doc comment has always said a window with subsurfaces + // "won't have them rendered at all through this path" - intended to + // mean the caller falls back to `surface_content_elements` (subsurface- + // aware) for such a window instead. Nothing here actually enforced that: + // without this check, a window whose real content lives in a subsurface + // (confirmed live on the udev/Pixman backend's identical bug: Firefox + // does this) would round and return just its own root surface - often + // blank/background-only - instead of falling back, silently dropping + // the window's actual content rather than merely leaving it unrounded. + if !smithay::wayland::compositor::get_children(surface).is_empty() { + return None; + } smithay::wayland::compositor::with_states(surface, |states| { smithay::backend::renderer::utils::import_surface(renderer, states).ok()?; Some(()) -- cgit v1.2.3