From 6c11548e93e520293a8578aade6c70d365a597ff Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:22:20 +0000 Subject: [PATCH] fix: correct cursor z-ordering in winit backend Move `render_cursor_overlays` before `assemble_scene_elements!` in the winit backend renderer so that the cursor elements are pushed into the render elements vector first. Smithay processes these front-to-back, so appending them first ensures the cursor is drawn on top of windows instead of being hidden behind them. Also slightly increased the vector capacity pre-allocation to account for the cursor elements. Co-authored-by: paperbenni <15818888+paperbenni@users.noreply.github.com> --- src/wayland/render/winit.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/wayland/render/winit.rs b/src/wayland/render/winit.rs index d59d8e3f..5a1a15a2 100644 --- a/src/wayland/render/winit.rs +++ b/src/wayland/render/winit.rs @@ -59,7 +59,15 @@ pub fn render_frame( // Shared: get element counts for pre-allocation let counts = get_render_element_counts(&scene, space_render_elements.len(), num_upper); - let mut render_elements = Vec::with_capacity(counts.total()); + let mut render_elements = Vec::with_capacity(counts.total() + 2); + + // Backend-specific: render cursor overlays (client surface cursors and DnD icons) + render_cursor_overlays( + renderer, + &cursor_presentation, + state.pointer.current_location(), + &mut render_elements, + ); // Shared: assemble elements in z-order super::assemble_scene_elements!( @@ -70,14 +78,6 @@ pub fn render_frame( render_elements ); - // Backend-specific: render cursor overlays (client surface cursors and DnD icons) - render_cursor_overlays( - renderer, - &cursor_presentation, - state.pointer.current_location(), - &mut render_elements, - ); - // Backend-specific: render with damage tracker let render_result = damage_tracker .render_output(