diff --git a/crates/bevy_winit/src/lib.rs b/crates/bevy_winit/src/lib.rs index d88c0c9e21a00..b6ae9af8ec459 100644 --- a/crates/bevy_winit/src/lib.rs +++ b/crates/bevy_winit/src/lib.rs @@ -679,7 +679,7 @@ pub fn winit_runner(mut app: App) { runner_state.is_active = true; } event::Event::MainEventsCleared => { - if runner_state.is_active { + if finished_and_setup_done && runner_state.is_active { let (config, windows) = focused_windows_state.get(&app.world); let focused = windows.iter().any(|window| window.focused); let should_update = match config.update_mode(focused) { @@ -738,47 +738,48 @@ pub fn winit_runner(mut app: App) { *control_flow = ControlFlow::Exit; } } - - // create any new windows - #[cfg(not(target_arch = "wasm32"))] - let ( - commands, - mut windows, - event_writer, - winit_windows, - adapters, - handlers, - accessibility_requested, - ) = create_window_system_state.get_mut(&mut app.world); - - #[cfg(target_arch = "wasm32")] - let ( - commands, - mut windows, - event_writer, - winit_windows, - adapters, - handlers, - accessibility_requested, - event_channel, - ) = create_window_system_state.get_mut(&mut app.world); - - create_windows( - event_loop, - commands, - windows.iter_mut(), - event_writer, - winit_windows, - adapters, - handlers, - accessibility_requested, - #[cfg(target_arch = "wasm32")] - event_channel, - ); - - create_window_system_state.apply(&mut app.world); } } + + // create any new windows + // (even if app did not update, some may have been created by plugin setup) + #[cfg(not(target_arch = "wasm32"))] + let ( + commands, + mut windows, + event_writer, + winit_windows, + adapters, + handlers, + accessibility_requested, + ) = create_window_system_state.get_mut(&mut app.world); + + #[cfg(target_arch = "wasm32")] + let ( + commands, + mut windows, + event_writer, + winit_windows, + adapters, + handlers, + accessibility_requested, + event_channel, + ) = create_window_system_state.get_mut(&mut app.world); + + create_windows( + event_loop, + commands, + windows.iter_mut(), + event_writer, + winit_windows, + adapters, + handlers, + accessibility_requested, + #[cfg(target_arch = "wasm32")] + event_channel, + ); + + create_window_system_state.apply(&mut app.world); } _ => (), }