summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-01-31 16:39:46 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-01-31 16:39:46 +0700
commit6f604ab3995cb345aacf183a569589988aa3ad1f (patch)
tree6e0c9c38366c9d70204c80fc66bd8e8a7652cf52 /winit
parent2f57051283107e83a392486e8d9075f91f1b3332 (diff)
downloadiced-6f604ab3995cb345aacf183a569589988aa3ad1f.tar.gz
iced-6f604ab3995cb345aacf183a569589988aa3ad1f.tar.bz2
iced-6f604ab3995cb345aacf183a569589988aa3ad1f.zip
Allow `Application::run` to return on native platforms
Diffstat (limited to 'winit')
-rw-r--r--winit/src/application.rs44
1 files changed, 42 insertions, 2 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 7ddb9947..ed077507 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -193,7 +193,7 @@ where
let mut context = task::Context::from_waker(task::noop_waker_ref());
- event_loop.run(move |event, _, control_flow| {
+ platform::run(event_loop, move |event, _, control_flow| {
use winit::event_loop::ControlFlow;
if let ControlFlow::Exit = control_flow {
@@ -225,7 +225,7 @@ where
task::Poll::Ready(_) => ControlFlow::Exit,
};
}
- });
+ })
}
async fn run_instance<A, E, C>(
@@ -574,3 +574,43 @@ pub fn run_command<Message: 'static + std::fmt::Debug + Send, E: Executor>(
}
}
}
+
+#[cfg(not(target_arch = "wasm32"))]
+mod platform {
+ pub fn run<T, F>(
+ mut event_loop: winit::event_loop::EventLoop<T>,
+ event_handler: F,
+ ) -> Result<(), super::Error>
+ where
+ F: 'static
+ + FnMut(
+ winit::event::Event<'_, T>,
+ &winit::event_loop::EventLoopWindowTarget<T>,
+ &mut winit::event_loop::ControlFlow,
+ ),
+ {
+ use winit::platform::run_return::EventLoopExtRunReturn;
+
+ let _ = event_loop.run_return(event_handler);
+
+ Ok(())
+ }
+}
+
+#[cfg(target_arch = "wasm32")]
+mod platform {
+ pub fn run<T, F>(
+ event_loop: winit::event_loop::EventLoop<T>,
+ event_handler: F,
+ ) -> !
+ where
+ F: 'static
+ + FnMut(
+ winit::event::Event<'_, T>,
+ &winit::event_loop::EventLoopWindowTarget<T>,
+ &mut winit::event_loop::ControlFlow,
+ ),
+ {
+ event_loop.run(event_handler)
+ }
+}