From 69c50c851193348ed3aab746678741f3cdda9fb3 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 12 Nov 2020 02:22:22 +0100 Subject: Introduce `event::Status` to `Subscription` --- native/src/subscription.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'native/src/subscription.rs') diff --git a/native/src/subscription.rs b/native/src/subscription.rs index 18750abf..3cc04188 100644 --- a/native/src/subscription.rs +++ b/native/src/subscription.rs @@ -1,5 +1,6 @@ //! Listen to external events in your application. -use crate::{Event, Hasher}; +use crate::event::{self, Event}; +use crate::Hasher; use iced_futures::futures::stream::BoxStream; /// A request to listen to external events. @@ -15,19 +16,21 @@ use iced_futures::futures::stream::BoxStream; /// /// [`Command`]: ../struct.Command.html /// [`Subscription`]: struct.Subscription.html -pub type Subscription = iced_futures::Subscription; +pub type Subscription = + iced_futures::Subscription; /// A stream of runtime events. /// /// It is the input of a [`Subscription`] in the native runtime. /// /// [`Subscription`]: type.Subscription.html -pub type EventStream = BoxStream<'static, Event>; +pub type EventStream = BoxStream<'static, (Event, event::Status)>; /// A native [`Subscription`] tracker. /// /// [`Subscription`]: type.Subscription.html -pub type Tracker = iced_futures::subscription::Tracker; +pub type Tracker = + iced_futures::subscription::Tracker; pub use iced_futures::subscription::Recipe; @@ -37,13 +40,18 @@ use events::Events; /// Returns a [`Subscription`] to all the runtime events. /// -/// This subscription will notify your application of any [`Event`] handled by -/// the runtime. +/// This subscription will notify your application of any [`Event`] that was +/// not captured by any widget. /// /// [`Subscription`]: type.Subscription.html /// [`Event`]: ../enum.Event.html pub fn events() -> Subscription { - Subscription::from_recipe(Events { f: Some }) + Subscription::from_recipe(Events { + f: |event, status| match status { + event::Status::Ignored => Some(event), + event::Status::Captured => None, + }, + }) } /// Returns a [`Subscription`] that filters all the runtime events with the @@ -58,7 +66,7 @@ pub fn events() -> Subscription { /// [`Subscription`]: type.Subscription.html /// [`Event`]: ../enum.Event.html pub fn events_with( - f: fn(Event) -> Option, + f: fn(Event, event::Status) -> Option, ) -> Subscription where Message: 'static + Send, -- cgit