summaryrefslogtreecommitdiffstats
path: root/native/src/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/element.rs')
-rw-r--r--native/src/element.rs21
1 files changed, 10 insertions, 11 deletions
diff --git a/native/src/element.rs b/native/src/element.rs
index ee404a1c..7e806b08 100644
--- a/native/src/element.rs
+++ b/native/src/element.rs
@@ -4,7 +4,7 @@ use crate::mouse;
use crate::overlay;
use crate::renderer;
use crate::{
- Clipboard, Color, Hasher, Layout, Length, Point, Rectangle, Widget,
+ Clipboard, Color, Hasher, Layout, Length, Point, Rectangle, Shell, Widget,
};
/// A generic [`Widget`].
@@ -228,7 +228,7 @@ where
cursor_position: Point,
renderer: &Renderer,
clipboard: &mut dyn Clipboard,
- messages: &mut Vec<Message>,
+ shell: &mut Shell<'_, Message>,
) -> event::Status {
self.widget.on_event(
event,
@@ -236,7 +236,7 @@ where
cursor_position,
renderer,
clipboard,
- messages,
+ shell,
)
}
@@ -327,9 +327,10 @@ where
cursor_position: Point,
renderer: &Renderer,
clipboard: &mut dyn Clipboard,
- messages: &mut Vec<B>,
+ shell: &mut Shell<'_, B>,
) -> event::Status {
- let mut original_messages = Vec::new();
+ let mut local_messages = Vec::new();
+ let mut local_shell = Shell::new(&mut local_messages);
let status = self.widget.on_event(
event,
@@ -337,12 +338,10 @@ where
cursor_position,
renderer,
clipboard,
- &mut original_messages,
+ &mut local_shell,
);
- original_messages
- .drain(..)
- .for_each(|message| messages.push((self.mapper)(message)));
+ shell.merge(local_shell, &self.mapper);
status
}
@@ -427,7 +426,7 @@ where
cursor_position: Point,
renderer: &Renderer,
clipboard: &mut dyn Clipboard,
- messages: &mut Vec<Message>,
+ shell: &mut Shell<'_, Message>,
) -> event::Status {
self.element.widget.on_event(
event,
@@ -435,7 +434,7 @@ where
cursor_position,
renderer,
clipboard,
- messages,
+ shell,
)
}