From bb9115558d2649c3bced42d340648b8dbceb1fa2 Mon Sep 17 00:00:00 2001 From: Votre Nom Date: Tue, 5 May 2026 08:27:03 +0200 Subject: [PATCH] Fix high-signal widget and Wayland warnings Avoid recursive operation traversal, execute visible list updates instead of leaving a lazy iterator unused, remove unreachable cfg-gated surface creation code, and handle subsurface buffer attachment failures. --- widget/src/container.rs | 2 +- widget/src/list.rs | 2 +- winit/src/platform_specific/mod.rs | 7 +++++-- winit/src/platform_specific/wayland/subsurface_widget.rs | 5 ++++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/widget/src/container.rs b/widget/src/container.rs index c9a300c9..e4aeabf2 100644 --- a/widget/src/container.rs +++ b/widget/src/container.rs @@ -601,7 +601,7 @@ pub fn visible_bounds(id: Id) -> Task> { operate: &mut dyn FnMut(&mut dyn Operation>), ) { self.depth += 1; - self.traverse(operate); + operate(self); self.depth -= 1; } diff --git a/widget/src/list.rs b/widget/src/list.rs index de9fe9b8..6b5f663f 100644 --- a/widget/src/list.rs +++ b/widget/src/list.rs @@ -366,7 +366,7 @@ where self.visible_elements .iter_mut() .zip(&mut state.visible_layouts) - .map(|(element, (index, layout, tree))| { + .for_each(|(element, (index, layout, tree))| { element.as_widget_mut().update( tree, event, diff --git a/winit/src/platform_specific/mod.rs b/winit/src/platform_specific/mod.rs index 9b74ee9c..5e84d16a 100644 --- a/winit/src/platform_specific/mod.rs +++ b/winit/src/platform_specific/mod.rs @@ -153,9 +153,12 @@ impl PlatformSpecific { ) -> Option> { #[cfg(all(feature = "cctk", target_os = "linux"))] { - return self.wayland.create_surface(); + self.wayland.create_surface() + } + #[cfg(not(all(feature = "cctk", target_os = "linux")))] + { + None } - None } pub(crate) fn update_surface_shm( diff --git a/winit/src/platform_specific/wayland/subsurface_widget.rs b/winit/src/platform_specific/wayland/subsurface_widget.rs index ed53d9ea..15233009 100644 --- a/winit/src/platform_specific/wayland/subsurface_widget.rs +++ b/winit/src/platform_specific/wayland/subsurface_widget.rs @@ -410,7 +410,10 @@ impl SubsurfaceState { .unwrap(); canvas[0..width as usize * height as usize * 4].copy_from_slice(data); surface.damage_buffer(0, 0, width as i32, height as i32); - buffer.attach_to(&surface); + if let Err(err) = buffer.attach_to(&surface) { + log::warn!("failed to attach shm buffer to subsurface: {err}"); + return; + } surface.offset(offset.x as i32, offset.y as i32); wp_viewport.set_destination( (width as f64 / scale) as i32,