mirror of
https://github.com/bevyengine/bevy
synced 2024-11-22 20:53:53 +00:00
fix order of exit/close window systems (#5558)
# Objective Fixes #5384 and maybe other issues around window closing/app not exiting ## Solution There are three systems involved in exiting when closing a window: - `close_when_requested` asking Winit to close the window in stage `Update` - `exit_on_all_closed` exiting when no window remains opened in stage `Update` - `change_window` removing windows that are closed in stage `PostUpdate` This ordering meant that when closing a window, we had to run one more frame to actually exit. As there was no window, panics could occur in systems assuming there was a window. In case of Bevy app using a low power options, that means waiting for the timeout before actually exiting the app (60 seconds by default) This PR changes the ordering so that `exit_on_all_closed` happens after `change_window` in the same frame, so there isn't an extra frame without window
This commit is contained in:
parent
bd008589f3
commit
07d576987a
1 changed files with 8 additions and 2 deletions
|
@ -22,7 +22,10 @@ pub mod prelude {
|
|||
}
|
||||
|
||||
use bevy_app::prelude::*;
|
||||
use bevy_ecs::{event::Events, schedule::SystemLabel};
|
||||
use bevy_ecs::{
|
||||
event::Events,
|
||||
schedule::{ParallelSystemDescriptorCoercion, SystemLabel},
|
||||
};
|
||||
|
||||
/// The configuration information for the [`WindowPlugin`].
|
||||
///
|
||||
|
@ -106,7 +109,10 @@ impl Plugin for WindowPlugin {
|
|||
}
|
||||
|
||||
if settings.exit_on_all_closed {
|
||||
app.add_system(exit_on_all_closed);
|
||||
app.add_system_to_stage(
|
||||
CoreStage::PostUpdate,
|
||||
exit_on_all_closed.after(ModifiesWindows),
|
||||
);
|
||||
}
|
||||
if settings.close_when_requested {
|
||||
app.add_system(close_when_requested);
|
||||
|
|
Loading…
Reference in a new issue