diff options
author | 2024-08-15 01:52:45 +0200 | |
---|---|---|
committer | 2024-08-15 01:52:45 +0200 | |
commit | 7c2abc9b8b6898459be56b7b4ae197eadb7dc0ae (patch) | |
tree | 8fc39d818d248b283982988c2991bd6cc13f72c4 /winit | |
parent | 515772c9f8eeaa318bad52fd04caba4da69b075e (diff) | |
download | iced-7c2abc9b8b6898459be56b7b4ae197eadb7dc0ae.tar.gz iced-7c2abc9b8b6898459be56b7b4ae197eadb7dc0ae.tar.bz2 iced-7c2abc9b8b6898459be56b7b4ae197eadb7dc0ae.zip |
Fix crash when application boots from a URL event in macOS
Diffstat (limited to 'winit')
-rw-r--r-- | winit/src/program.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/winit/src/program.rs b/winit/src/program.rs index efe8a978..57cef684 100644 --- a/winit/src/program.rs +++ b/winit/src/program.rs @@ -650,7 +650,7 @@ async fn run_instance<P, C>( mut runtime: Runtime<P::Executor, Proxy<P::Message>, Action<P::Message>>, mut proxy: Proxy<P::Message>, mut debug: Debug, - mut boot: oneshot::Receiver<Boot<C>>, + boot: oneshot::Receiver<Boot<C>>, mut event_receiver: mpsc::UnboundedReceiver<Event<Action<P::Message>>>, mut control_sender: mpsc::UnboundedSender<Control>, is_daemon: bool, @@ -665,7 +665,7 @@ async fn run_instance<P, C>( 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<P, C>( 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, |