diff options
author | 2020-11-12 02:22:22 +0100 | |
---|---|---|
committer | 2020-11-12 02:22:22 +0100 | |
commit | 69c50c851193348ed3aab746678741f3cdda9fb3 (patch) | |
tree | fe8fe23c2de55cbb3af21e0682a9a51121b2b357 /native | |
parent | 33d80b5a0b8b5b2837c99be2a152bdeb73ca60c8 (diff) | |
download | iced-69c50c851193348ed3aab746678741f3cdda9fb3.tar.gz iced-69c50c851193348ed3aab746678741f3cdda9fb3.tar.bz2 iced-69c50c851193348ed3aab746678741f3cdda9fb3.zip |
Introduce `event::Status` to `Subscription`
Diffstat (limited to 'native')
-rw-r--r-- | native/src/runtime.rs | 12 | ||||
-rw-r--r-- | native/src/subscription.rs | 24 | ||||
-rw-r--r-- | native/src/subscription/events.rs | 15 |
3 files changed, 33 insertions, 18 deletions
diff --git a/native/src/runtime.rs b/native/src/runtime.rs index 9fa031f4..bd814a0b 100644 --- a/native/src/runtime.rs +++ b/native/src/runtime.rs @@ -1,5 +1,6 @@ //! Run commands and subscriptions. -use crate::{Event, Hasher}; +use crate::event::{self, Event}; +use crate::Hasher; /// A native runtime with a generic executor and receiver of results. /// @@ -8,5 +9,10 @@ use crate::{Event, Hasher}; /// /// [`Command`]: ../struct.Command.html /// [`Subscription`]: ../struct.Subscription.html -pub type Runtime<Executor, Receiver, Message> = - iced_futures::Runtime<Hasher, Event, Executor, Receiver, Message>; +pub type Runtime<Executor, Receiver, Message> = iced_futures::Runtime< + Hasher, + (Event, event::Status), + Executor, + Receiver, + Message, +>; 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<T> = iced_futures::Subscription<Hasher, Event, T>; +pub type Subscription<T> = + iced_futures::Subscription<Hasher, (Event, event::Status), T>; /// 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<Hasher, Event>; +pub type Tracker = + iced_futures::subscription::Tracker<Hasher, (Event, event::Status)>; 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<Event> { - 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<Event> { /// [`Subscription`]: type.Subscription.html /// [`Event`]: ../enum.Event.html pub fn events_with<Message>( - f: fn(Event) -> Option<Message>, + f: fn(Event, event::Status) -> Option<Message>, ) -> Subscription<Message> where Message: 'static + Send, diff --git a/native/src/subscription/events.rs b/native/src/subscription/events.rs index a1ae6051..f689f3af 100644 --- a/native/src/subscription/events.rs +++ b/native/src/subscription/events.rs @@ -1,16 +1,15 @@ -use crate::{ - subscription::{EventStream, Recipe}, - Event, Hasher, -}; +use crate::event::{self, Event}; +use crate::subscription::{EventStream, Recipe}; +use crate::Hasher; use iced_futures::futures::future; use iced_futures::futures::StreamExt; use iced_futures::BoxStream; pub struct Events<Message> { - pub(super) f: fn(Event) -> Option<Message>, + pub(super) f: fn(Event, event::Status) -> Option<Message>, } -impl<Message> Recipe<Hasher, Event> for Events<Message> +impl<Message> Recipe<Hasher, (Event, event::Status)> for Events<Message> where Message: 'static + Send, { @@ -29,7 +28,9 @@ where event_stream: EventStream, ) -> BoxStream<Self::Output> { event_stream - .filter_map(move |event| future::ready((self.f)(event))) + .filter_map(move |(event, status)| { + future::ready((self.f)(event, status)) + }) .boxed() } } |