diff options
author | 2020-03-31 17:49:56 +0200 | |
---|---|---|
committer | 2020-03-31 17:49:56 +0200 | |
commit | e79e832092385346beec47f63e40f24800c535f8 (patch) | |
tree | c29df36b1987de66a58cfb981c5958d25712d51e /web | |
parent | 327347501c78a1c8e55a39fe1b5d54d7c2fcbcab (diff) | |
parent | f0ebcc24742aba79cc779a4145a188f2534a5e35 (diff) | |
download | iced-e79e832092385346beec47f63e40f24800c535f8.tar.gz iced-e79e832092385346beec47f63e40f24800c535f8.tar.bz2 iced-e79e832092385346beec47f63e40f24800c535f8.zip |
Merge pull request #246 from hecrj/feature/application-flags
Application flags
Diffstat (limited to 'web')
-rw-r--r-- | web/src/lib.rs | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/web/src/lib.rs b/web/src/lib.rs index 1de00545..a0b39c4a 100644 --- a/web/src/lib.rs +++ b/web/src/lib.rs @@ -94,11 +94,6 @@ pub use executor::Executor; /// An [`Application`](trait.Application.html) can execute asynchronous actions /// by returning a [`Command`](struct.Command.html) in some of its methods. pub trait Application { - /// The type of __messages__ your [`Application`] will produce. - /// - /// [`Application`]: trait.Application.html - type Message: Send; - /// The [`Executor`] that will run commands and subscriptions. /// /// The [`executor::WasmBindgen`] can be a good choice for the Web. @@ -107,6 +102,16 @@ pub trait Application { /// [`executor::Default`]: executor/struct.Default.html type Executor: Executor; + /// The type of __messages__ your [`Application`] will produce. + /// + /// [`Application`]: trait.Application.html + type Message: Send; + + /// The data needed to initialize your [`Application`]. + /// + /// [`Application`]: trait.Application.html + type Flags; + /// Initializes the [`Application`]. /// /// Here is where you should return the initial state of your app. @@ -117,7 +122,7 @@ pub trait Application { /// request, etc. /// /// [`Application`]: trait.Application.html - fn new() -> (Self, Command<Self::Message>) + fn new(flags: Self::Flags) -> (Self, Command<Self::Message>) where Self: Sized; @@ -165,21 +170,16 @@ pub trait Application { /// Runs the [`Application`]. /// /// [`Application`]: trait.Application.html - fn run() + fn run(flags: Self::Flags) where Self: 'static + Sized, { use futures::stream::StreamExt; - let (app, command) = Self::new(); - let window = web_sys::window().unwrap(); let document = window.document().unwrap(); let body = document.body().unwrap(); - let mut title = app.title(); - document.set_title(&title); - let (sender, receiver) = iced_futures::futures::channel::mpsc::unbounded(); @@ -187,6 +187,12 @@ pub trait Application { Self::Executor::new().expect("Create executor"), sender.clone(), ); + + let (app, command) = runtime.enter(|| Self::new(flags)); + + let mut title = app.title(); + document.set_title(&title); + runtime.spawn(command); let application = Rc::new(RefCell::new(app)); @@ -199,8 +205,13 @@ pub trait Application { let vdom = dodrio::Vdom::new(&body, instance); let event_loop = receiver.for_each(move |message| { - let command = application.borrow_mut().update(message); - let subscription = application.borrow().subscription(); + let (command, subscription) = runtime.enter(|| { + let command = application.borrow_mut().update(message); + let subscription = application.borrow().subscription(); + + (command, subscription) + }); + let new_title = application.borrow().title(); runtime.spawn(command); |