From ac7b77f59c720bdb618057df0435fa1170d9c84a Mon Sep 17 00:00:00 2001 From: Cory Forsstrom Date: Mon, 17 Apr 2023 18:40:41 -0700 Subject: Only invalidate layout if children layout is invalid --- lazy/src/responsive.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'lazy') diff --git a/lazy/src/responsive.rs b/lazy/src/responsive.rs index cdeec2ad..2f097ff5 100644 --- a/lazy/src/responsive.rs +++ b/lazy/src/responsive.rs @@ -145,8 +145,6 @@ where _renderer: &Renderer, limits: &layout::Limits, ) -> layout::Node { - let _ = self.content.borrow_mut().layout.take(); - layout::Node::new(limits.max()) } @@ -186,7 +184,10 @@ where let state = tree.state.downcast_mut::(); let mut content = self.content.borrow_mut(); - content.resolve( + let mut local_messages = vec![]; + let mut local_shell = Shell::new(&mut local_messages); + + let status = content.resolve( &mut state.tree.borrow_mut(), renderer, layout, @@ -199,10 +200,18 @@ where cursor_position, renderer, clipboard, - shell, + &mut local_shell, ) }, - ) + ); + + if local_shell.is_layout_invalid() { + let _ = content.layout.take(); + } + + shell.merge(local_shell, std::convert::identity); + + status } fn draw( -- cgit