summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-12 00:30:06 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-12 00:40:52 +0100
commit3bcee62beb36d9e186d8716c7660433fac071ed6 (patch)
tree9885c5192f22691171bd53f995b2e9621ce12a25 /native
parent04468a7147c38cd363cb545de0d9a9881ce071dd (diff)
downloadiced-3bcee62beb36d9e186d8716c7660433fac071ed6.tar.gz
iced-3bcee62beb36d9e186d8716c7660433fac071ed6.tar.bz2
iced-3bcee62beb36d9e186d8716c7660433fac071ed6.zip
Implement event capturing for `Column`
Diffstat (limited to 'native')
-rw-r--r--native/src/event.rs21
-rw-r--r--native/src/widget/column.rs16
2 files changed, 29 insertions, 8 deletions
diff --git a/native/src/event.rs b/native/src/event.rs
index 689c8f5d..9c079151 100644
--- a/native/src/event.rs
+++ b/native/src/event.rs
@@ -35,3 +35,24 @@ pub enum Status {
/// [`Event`]: enum.Event.html
Captured,
}
+
+impl Status {
+ /// Merges two [`Status`] into one.
+ ///
+ /// `Captured` takes precedence over `Ignored`:
+ ///
+ /// ```
+ /// use iced_native::event::Status;
+ ///
+ /// assert_eq!(Status::Ignored.merge(Status::Ignored), Status::Ignored);
+ /// assert_eq!(Status::Ignored.merge(Status::Captured), Status::Captured);
+ /// assert_eq!(Status::Captured.merge(Status::Ignored), Status::Captured);
+ /// assert_eq!(Status::Captured.merge(Status::Captured), Status::Captured);
+ /// ```
+ pub fn merge(self, b: Self) -> Self {
+ match self {
+ Status::Ignored => b,
+ Status::Captured => Status::Captured,
+ }
+ }
+}
diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs
index 425bd33f..42a9e734 100644
--- a/native/src/widget/column.rs
+++ b/native/src/widget/column.rs
@@ -163,20 +163,20 @@ where
renderer: &Renderer,
clipboard: Option<&dyn Clipboard>,
) -> event::Status {
- self.children.iter_mut().zip(layout.children()).for_each(
- |(child, layout)| {
- let _ = child.widget.on_event(
+ self.children
+ .iter_mut()
+ .zip(layout.children())
+ .map(|(child, layout)| {
+ child.widget.on_event(
event.clone(),
layout,
cursor_position,
messages,
renderer,
clipboard,
- );
- },
- );
-
- event::Status::Ignored
+ )
+ })
+ .fold(event::Status::Ignored, event::Status::merge)
}
fn draw(