mirror of
https://github.com/rust-windowing/winit.git
synced 2026-06-26 22:53:15 -04:00
Add exit code on windows
This commit is contained in:
@@ -188,11 +188,11 @@ impl<T: 'static> EventLoop<T> {
|
||||
where
|
||||
F: 'static + FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
|
||||
{
|
||||
self.run_return(event_handler);
|
||||
::std::process::exit(0);
|
||||
let exit_code = self.run_return(event_handler);
|
||||
::std::process::exit(exit_code);
|
||||
}
|
||||
|
||||
pub fn run_return<F>(&mut self, mut event_handler: F)
|
||||
pub fn run_return<F>(&mut self, mut event_handler: F) -> i32
|
||||
where
|
||||
F: FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
|
||||
{
|
||||
@@ -225,7 +225,9 @@ impl<T: 'static> EventLoop<T> {
|
||||
panic::resume_unwind(payload);
|
||||
}
|
||||
|
||||
if runner.control_flow() == ControlFlow::Exit && !runner.handling_events() {
|
||||
if matches!(runner.control_flow(), ControlFlow::Exit(_))
|
||||
&& !runner.handling_events()
|
||||
{
|
||||
break 'main;
|
||||
}
|
||||
}
|
||||
@@ -234,7 +236,15 @@ impl<T: 'static> EventLoop<T> {
|
||||
unsafe {
|
||||
runner.loop_destroyed();
|
||||
}
|
||||
let exit_code = if let ControlFlow::Exit(code) = runner.control_flow() {
|
||||
code
|
||||
} else {
|
||||
// we can't know what exactly the user wanted to return, so just assume 0
|
||||
0
|
||||
};
|
||||
|
||||
runner.reset_runner();
|
||||
exit_code
|
||||
}
|
||||
|
||||
pub fn create_proxy(&self) -> EventLoopProxy<T> {
|
||||
@@ -763,7 +773,7 @@ unsafe fn process_control_flow<T: 'static>(runner: &EventLoopRunner<T>) {
|
||||
Box::into_raw(WaitUntilInstantBox::new(until)) as LPARAM,
|
||||
);
|
||||
}
|
||||
ControlFlow::Exit => (),
|
||||
ControlFlow::Exit(_) => (),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -241,10 +241,10 @@ impl<T> EventLoopRunner<T> {
|
||||
let mut event_handler = self.event_handler.take()
|
||||
.expect("either event handler is re-entrant (likely), or no event handler is registered (very unlikely)");
|
||||
|
||||
if control_flow != ControlFlow::Exit {
|
||||
event_handler(event, &mut control_flow);
|
||||
if let ControlFlow::Exit(code) = control_flow {
|
||||
event_handler(event, &mut ControlFlow::Exit(code));
|
||||
} else {
|
||||
event_handler(event, &mut ControlFlow::Exit);
|
||||
event_handler(event, &mut control_flow);
|
||||
}
|
||||
|
||||
assert!(self.event_handler.replace(Some(event_handler)).is_none());
|
||||
@@ -372,10 +372,12 @@ impl<T> EventLoopRunner<T> {
|
||||
let start_cause = match (init, self.control_flow()) {
|
||||
(true, _) => StartCause::Init,
|
||||
(false, ControlFlow::Poll) => StartCause::Poll,
|
||||
(false, ControlFlow::Exit) | (false, ControlFlow::Wait) => StartCause::WaitCancelled {
|
||||
requested_resume: None,
|
||||
start: self.last_events_cleared.get(),
|
||||
},
|
||||
(false, ControlFlow::Exit(_)) | (false, ControlFlow::Wait) => {
|
||||
StartCause::WaitCancelled {
|
||||
requested_resume: None,
|
||||
start: self.last_events_cleared.get(),
|
||||
}
|
||||
}
|
||||
(false, ControlFlow::WaitUntil(requested_resume)) => {
|
||||
if Instant::now() < requested_resume {
|
||||
StartCause::WaitCancelled {
|
||||
|
||||
Reference in New Issue
Block a user