From 3be8f6e98990f7e8a3af11400bbecaecddda336c Mon Sep 17 00:00:00 2001 From: Nick Senger Date: Tue, 10 May 2022 17:18:08 -0700 Subject: fix: prevent building overlay with stale layout --- lazy/src/pure/component.rs | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'lazy/src/pure') diff --git a/lazy/src/pure/component.rs b/lazy/src/pure/component.rs index 2971d2b7..bf6ff908 100644 --- a/lazy/src/pure/component.rs +++ b/lazy/src/pure/component.rs @@ -415,6 +415,35 @@ where let mut local_messages = Vec::new(); let mut local_shell = Shell::new(&mut local_messages); + if self + .overlay + .as_ref() + .and_then(|overlay| overlay.borrow_overlay().as_ref()) + .is_none() + { + let overlay = self.overlay.take().unwrap().into_heads(); + + self.overlay = Some( + OverlayBuilder { + instance: overlay.instance, + instance_ref_builder: |instance| instance.state.borrow(), + tree: overlay.tree, + types: PhantomData, + overlay_builder: |instance, tree| { + instance + .as_ref() + .unwrap() + .borrow_element() + .as_ref() + .unwrap() + .as_widget() + .overlay(&mut tree.children[0], layout, renderer) + }, + } + .build(), + ); + } + let event_status = self .with_overlay_mut_maybe(|overlay| { overlay.on_event( @@ -464,16 +493,7 @@ where instance_ref_builder: |instance| instance.state.borrow(), tree: overlay.tree, types: PhantomData, - overlay_builder: |instance, tree| { - instance - .as_ref() - .unwrap() - .borrow_element() - .as_ref() - .unwrap() - .as_widget() - .overlay(&mut tree.children[0], layout, renderer) - }, + overlay_builder: |_, _| None, } .build(), ); -- cgit From 4c98de0a53b9a59a3a03cee0c5d7ce34ac434067 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 13 May 2022 18:45:03 +0200 Subject: Revert "fix: prevent building overlay with stale layout" This reverts commit 3be8f6e98990f7e8a3af11400bbecaecddda336c. --- lazy/src/pure/component.rs | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) (limited to 'lazy/src/pure') diff --git a/lazy/src/pure/component.rs b/lazy/src/pure/component.rs index bf6ff908..2971d2b7 100644 --- a/lazy/src/pure/component.rs +++ b/lazy/src/pure/component.rs @@ -415,35 +415,6 @@ where let mut local_messages = Vec::new(); let mut local_shell = Shell::new(&mut local_messages); - if self - .overlay - .as_ref() - .and_then(|overlay| overlay.borrow_overlay().as_ref()) - .is_none() - { - let overlay = self.overlay.take().unwrap().into_heads(); - - self.overlay = Some( - OverlayBuilder { - instance: overlay.instance, - instance_ref_builder: |instance| instance.state.borrow(), - tree: overlay.tree, - types: PhantomData, - overlay_builder: |instance, tree| { - instance - .as_ref() - .unwrap() - .borrow_element() - .as_ref() - .unwrap() - .as_widget() - .overlay(&mut tree.children[0], layout, renderer) - }, - } - .build(), - ); - } - let event_status = self .with_overlay_mut_maybe(|overlay| { overlay.on_event( @@ -493,7 +464,16 @@ where instance_ref_builder: |instance| instance.state.borrow(), tree: overlay.tree, types: PhantomData, - overlay_builder: |_, _| None, + overlay_builder: |instance, tree| { + instance + .as_ref() + .unwrap() + .borrow_element() + .as_ref() + .unwrap() + .as_widget() + .overlay(&mut tree.children[0], layout, renderer) + }, } .build(), ); -- cgit From ea389ac34c5a4929b7369da0f163ab6ae07bc000 Mon Sep 17 00:00:00 2001 From: Nick Senger Date: Fri, 13 May 2022 12:38:16 -0700 Subject: remove rebuild of component overlay from `on_event` --- lazy/src/pure/component.rs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'lazy/src/pure') diff --git a/lazy/src/pure/component.rs b/lazy/src/pure/component.rs index 2971d2b7..b6e10054 100644 --- a/lazy/src/pure/component.rs +++ b/lazy/src/pure/component.rs @@ -464,16 +464,7 @@ where instance_ref_builder: |instance| instance.state.borrow(), tree: overlay.tree, types: PhantomData, - overlay_builder: |instance, tree| { - instance - .as_ref() - .unwrap() - .borrow_element() - .as_ref() - .unwrap() - .as_widget() - .overlay(&mut tree.children[0], layout, renderer) - }, + overlay_builder: |_, _| None, } .build(), ); -- cgit From 9330a83775991539e2d0b395b1422072b4baec21 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 1 Jul 2022 03:37:28 +0200 Subject: Fix `Widget::tag` implementation of `pure::Canvas` Using `P::State` can cause a panic if the `Canvas` has `()` as `P::State` and replaces a stateless widget in a future `view` call. --- lazy/src/pure/component.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'lazy/src/pure') diff --git a/lazy/src/pure/component.rs b/lazy/src/pure/component.rs index b6e10054..8de40e8c 100644 --- a/lazy/src/pure/component.rs +++ b/lazy/src/pure/component.rs @@ -70,8 +70,6 @@ where }) } -struct Tag(T); - struct Instance<'a, Message, Renderer, Event, S> { state: RefCell>>, } @@ -132,6 +130,7 @@ where Renderer: iced_native::Renderer, { fn tag(&self) -> tree::Tag { + struct Tag(T); tree::Tag::of::>() } -- cgit