summaryrefslogtreecommitdiffstats
path: root/lazy
diff options
context:
space:
mode:
authorLibravatar Nick Senger <dev@nsenger.com>2021-12-17 08:36:05 -0800
committerLibravatar Nick Senger <dev@nsenger.com>2021-12-17 08:36:05 -0800
commit042a294448e0826d70d97978925ff05043225077 (patch)
tree66cfb84f5efea0407a8022ed6522ef74f742bf7a /lazy
parentaa09bd4a981cfe0e11a21220193e823f48cdf450 (diff)
downloadiced-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.rs51
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