From bb78f1f336a50b2ca1fe27b2332bb4e6e5b28bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Thu, 15 May 2025 17:21:58 +0200 Subject: [PATCH] Fix overlay flickering when layout is invalidated --- runtime/src/user_interface.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/runtime/src/user_interface.rs b/runtime/src/user_interface.rs index 88e6df18..95e7574f 100644 --- a/runtime/src/user_interface.rs +++ b/runtime/src/user_interface.rs @@ -341,7 +341,30 @@ where &layout::Limits::new(Size::ZERO, self.bounds), ); - self.overlay = None; + if let Some(mut overlay) = self + .root + .as_widget_mut() + .overlay( + &mut self.state, + Layout::new(&self.base), + renderer, + &viewport, + Vector::ZERO, + ) + .map(overlay::Nested::new) + { + let layout = overlay.layout(renderer, self.bounds); + let interaction = overlay.mouse_interaction( + Layout::new(&layout), + cursor, + renderer, + ); + + self.overlay = Some(Overlay { + layout, + interaction, + }); + } }); if shell.are_widgets_invalid() {