summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2021-11-29 14:57:40 +0700
committerLibravatar GitHub <noreply@github.com>2021-11-29 14:57:40 +0700
commitd9f970ffd5af6dafb5e696ad317d9ea7b997eb4b (patch)
treea86528163bf5830b227cc9c6383102b2543f5c64
parent96c7f9765c716dbe94d25f4961d07bc8e18a02c4 (diff)
parent2f50d114612e0dc5cb23389ade2a21819836d254 (diff)
downloadiced-d9f970ffd5af6dafb5e696ad317d9ea7b997eb4b.tar.gz
iced-d9f970ffd5af6dafb5e696ad317d9ea7b997eb4b.tar.bz2
iced-d9f970ffd5af6dafb5e696ad317d9ea7b997eb4b.zip
Merge pull request #1112 from AndiHofi/on_exit_callback
Application::run returns on native platforms
-rw-r--r--glutin/src/application.rs7
-rw-r--r--src/application.rs5
-rw-r--r--winit/src/application.rs9
3 files changed, 14 insertions, 7 deletions
diff --git a/glutin/src/application.rs b/glutin/src/application.rs
index 5d10e96a..a1165de3 100644
--- a/glutin/src/application.rs
+++ b/glutin/src/application.rs
@@ -28,12 +28,13 @@ where
use futures::task;
use futures::Future;
use glutin::event_loop::EventLoop;
+ use glutin::platform::run_return::EventLoopExtRunReturn;
use glutin::ContextBuilder;
let mut debug = Debug::new();
debug.startup_started();
- let event_loop = EventLoop::with_user_event();
+ let mut event_loop = EventLoop::with_user_event();
let mut proxy = event_loop.create_proxy();
let mut runtime = {
@@ -115,7 +116,7 @@ where
let mut context = task::Context::from_waker(task::noop_waker_ref());
- event_loop.run(move |event, _, control_flow| {
+ event_loop.run_return(move |event, _, control_flow| {
use glutin::event_loop::ControlFlow;
if let ControlFlow::Exit = control_flow {
@@ -148,6 +149,8 @@ where
};
}
});
+
+ Ok(())
}
async fn run_instance<A, E, C>(
diff --git a/src/application.rs b/src/application.rs
index af04215e..b722c8a3 100644
--- a/src/application.rs
+++ b/src/application.rs
@@ -188,9 +188,10 @@ pub trait Application: Sized {
/// Runs the [`Application`].
///
/// On native platforms, this method will take control of the current thread
- /// and __will NOT return__ unless there is an [`Error`] during startup.
+ /// until the [`Application`] exits.
///
- /// It should probably be that last thing you call in your `main` function.
+ /// On the web platform, this method __will NOT return__ unless there is an
+ /// [`Error`] during startup.
///
/// [`Error`]: crate::Error
fn run(settings: Settings<Self::Flags>) -> crate::Result
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 9ae1364d..32423e80 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -115,11 +115,12 @@ where
use futures::task;
use futures::Future;
use winit::event_loop::EventLoop;
+ use winit::platform::run_return::EventLoopExtRunReturn;
let mut debug = Debug::new();
debug.startup_started();
- let event_loop = EventLoop::with_user_event();
+ let mut event_loop = EventLoop::with_user_event();
let mut proxy = event_loop.create_proxy();
let mut runtime = {
@@ -178,7 +179,7 @@ where
let mut context = task::Context::from_waker(task::noop_waker_ref());
- event_loop.run(move |event, _, control_flow| {
+ event_loop.run_return(move |event, _, control_flow| {
use winit::event_loop::ControlFlow;
if let ControlFlow::Exit = control_flow {
@@ -211,6 +212,8 @@ where
};
}
});
+
+ Ok(())
}
async fn run_instance<A, E, C>(
@@ -401,7 +404,7 @@ async fn run_instance<A, E, C>(
Err(error) => match error {
// This is an unrecoverable error.
window::SurfaceError::OutOfMemory => {
- panic!("{}", error);
+ panic!("{:?}", error);
}
_ => {
debug.render_finished();