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,  | 
