mirror of
https://github.com/rust-windowing/winit.git
synced 2026-09-02 06:40:06 -04:00
Add exit code on windows
This commit is contained in:
@@ -188,11 +188,11 @@ impl<T: 'static> EventLoop<T> {
|
|||||||
where
|
where
|
||||||
F: 'static + FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
|
F: 'static + FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
|
||||||
{
|
{
|
||||||
self.run_return(event_handler);
|
let exit_code = self.run_return(event_handler);
|
||||||
::std::process::exit(0);
|
::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
|
where
|
||||||
F: FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
|
F: FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
|
||||||
{
|
{
|
||||||
@@ -225,7 +225,9 @@ impl<T: 'static> EventLoop<T> {
|
|||||||
panic::resume_unwind(payload);
|
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;
|
break 'main;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -234,7 +236,15 @@ impl<T: 'static> EventLoop<T> {
|
|||||||
unsafe {
|
unsafe {
|
||||||
runner.loop_destroyed();
|
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();
|
runner.reset_runner();
|
||||||
|
exit_code
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_proxy(&self) -> EventLoopProxy<T> {
|
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,
|
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()
|
let mut event_handler = self.event_handler.take()
|
||||||
.expect("either event handler is re-entrant (likely), or no event handler is registered (very unlikely)");
|
.expect("either event handler is re-entrant (likely), or no event handler is registered (very unlikely)");
|
||||||
|
|
||||||
if control_flow != ControlFlow::Exit {
|
if let ControlFlow::Exit(code) = control_flow {
|
||||||
event_handler(event, &mut control_flow);
|
event_handler(event, &mut ControlFlow::Exit(code));
|
||||||
} else {
|
} else {
|
||||||
event_handler(event, &mut ControlFlow::Exit);
|
event_handler(event, &mut control_flow);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert!(self.event_handler.replace(Some(event_handler)).is_none());
|
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()) {
|
let start_cause = match (init, self.control_flow()) {
|
||||||
(true, _) => StartCause::Init,
|
(true, _) => StartCause::Init,
|
||||||
(false, ControlFlow::Poll) => StartCause::Poll,
|
(false, ControlFlow::Poll) => StartCause::Poll,
|
||||||
(false, ControlFlow::Exit) | (false, ControlFlow::Wait) => StartCause::WaitCancelled {
|
(false, ControlFlow::Exit(_)) | (false, ControlFlow::Wait) => {
|
||||||
|
StartCause::WaitCancelled {
|
||||||
requested_resume: None,
|
requested_resume: None,
|
||||||
start: self.last_events_cleared.get(),
|
start: self.last_events_cleared.get(),
|
||||||
},
|
}
|
||||||
|
}
|
||||||
(false, ControlFlow::WaitUntil(requested_resume)) => {
|
(false, ControlFlow::WaitUntil(requested_resume)) => {
|
||||||
if Instant::now() < requested_resume {
|
if Instant::now() < requested_resume {
|
||||||
StartCause::WaitCancelled {
|
StartCause::WaitCancelled {
|
||||||
|
|||||||
Reference in New Issue
Block a user