diff --git a/winit/src/program.rs b/winit/src/program.rs index efe8a978a9..57cef684ca 100644 --- a/winit/src/program.rs +++ b/winit/src/program.rs @@ -650,7 +650,7 @@ async fn run_instance( mut runtime: Runtime, Action>, mut proxy: Proxy, mut debug: Debug, - mut boot: oneshot::Receiver>, + boot: oneshot::Receiver>, mut event_receiver: mpsc::UnboundedReceiver>>, mut control_sender: mpsc::UnboundedSender, is_daemon: bool, @@ -665,7 +665,7 @@ async fn run_instance( let Boot { mut compositor, mut clipboard, - } = boot.try_recv().ok().flatten().expect("Receive boot"); + } = boot.await.expect("Receive boot"); let mut window_manager = WindowManager::new(); let mut is_window_opening = !is_daemon; @@ -679,7 +679,18 @@ async fn run_instance( debug.startup_finished(); - while let Some(event) = event_receiver.next().await { + loop { + // Empty the queue if possible + let event = if let Ok(event) = event_receiver.try_next() { + event + } else { + event_receiver.next().await + }; + + let Some(event) = event else { + break; + }; + match event { Event::WindowCreated { id,