diff options
author | 2021-12-17 08:36:05 -0800 | |
---|---|---|
committer | 2021-12-17 08:36:05 -0800 | |
commit | 042a294448e0826d70d97978925ff05043225077 (patch) | |
tree | 66cfb84f5efea0407a8022ed6522ef74f742bf7a /lazy | |
parent | aa09bd4a981cfe0e11a21220193e823f48cdf450 (diff) | |
download | iced-042a294448e0826d70d97978925ff05043225077.tar.gz iced-042a294448e0826d70d97978925ff05043225077.tar.bz2 iced-042a294448e0826d70d97978925ff05043225077.zip |
Revert "fix: process component overlay events together with those of the original element"
This reverts commit aa09bd4a981cfe0e11a21220193e823f48cdf450.
Diffstat (limited to 'lazy')
-rw-r--r-- | lazy/src/component.rs | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/lazy/src/component.rs b/lazy/src/component.rs index 998e2198..9b036b61 100644 --- a/lazy/src/component.rs +++ b/lazy/src/component.rs @@ -24,7 +24,6 @@ where state: RefCell::new(Some( StateBuilder { component: Box::new(component), - overlay_events: None, cache_builder: |state| { Some( CacheBuilder { @@ -56,7 +55,6 @@ struct Instance<'a, Message, Renderer, Event> { #[self_referencing] struct State<'a, Message: 'a, Renderer: 'a, Event: 'a> { component: Box<dyn Component<Message, Renderer, Event = Event> + 'a>, - overlay_events: Option<Vec<Event>>, #[borrows(mut component)] #[covariant] @@ -105,17 +103,6 @@ impl<'a, Message, Renderer, Event> Instance<'a, Message, Renderer, Event> { result }) } - - fn with_overlay_events_mut<T>( - &self, - f: impl FnOnce(&mut Option<Vec<Event>>) -> T, - ) -> T { - self.state - .borrow_mut() - .as_mut() - .unwrap() - .with_overlay_events_mut(f) - } } impl<'a, Message, Renderer, Event> Widget<Message, Renderer> @@ -148,9 +135,7 @@ where clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, ) -> event::Status { - let mut local_messages = self - .with_overlay_events_mut(|overlay_events| overlay_events.take()) - .unwrap_or_default(); + let mut local_messages = Vec::new(); let mut local_shell = Shell::new(&mut local_messages); let event_status = self.with_element_mut(|element| { @@ -183,7 +168,6 @@ where *self.state.borrow_mut() = Some( StateBuilder { component, - overlay_events: None, cache_builder: |state| { Some( CacheBuilder { @@ -387,9 +371,36 @@ where }); if !local_messages.is_empty() { - self.instance.with_overlay_events_mut(|overlay_events| { - *overlay_events = Some(local_messages) - }); + let mut component = + self.instance.state.take().unwrap().into_heads().component; + + for message in local_messages + .into_iter() + .filter_map(|message| component.update(message)) + { + shell.publish(message); + } + + self.instance.state = RefCell::new(Some( + StateBuilder { + component, + cache_builder: |state| { + Some( + CacheBuilder { + element: state.view(), + message: PhantomData, + overlay_builder: |element| { + element.overlay(layout) + }, + } + .build(), + ) + }, + } + .build(), + )); + + shell.invalidate_layout(); } event_status |