From 332224c92fe13f278301300d354e6b06b882ab5c Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 8 Aug 2026 19:23:16 +0200 Subject: [PATCH] orbital: Handle window closes during app drop --- winit-orbital/src/event_loop.rs | 15 ++++++++++++++- winit/src/changelog/unreleased.md | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/winit-orbital/src/event_loop.rs b/winit-orbital/src/event_loop.rs index 346bba451..65ec5cb7a 100644 --- a/winit-orbital/src/event_loop.rs +++ b/winit-orbital/src/event_loop.rs @@ -527,7 +527,7 @@ impl EventLoop { mut app: A, ) -> Result<(), EventLoopError> { self.window_target.exit.set(false); - loop { + let res = loop { match self.pump_app_events(None, &mut app) { PumpStatus::Exit(0) => { break Ok(()); @@ -539,7 +539,20 @@ impl EventLoop { continue; }, } + }; + + drop(app); + + // Handle window destroys that happened when dropping the app. + while let Some(destroy_id) = { + let mut destroys = self.window_target.destroys.lock().unwrap(); + destroys.pop_front() + } { + self.windows + .retain(|(window, _event_state)| WindowId::from_raw(window.fd()) != destroy_id); } + + res } fn single_iteration(&mut self, app: &mut A, cause: StartCause) { diff --git a/winit/src/changelog/unreleased.md b/winit/src/changelog/unreleased.md index d6af39f02..34180d5b9 100644 --- a/winit/src/changelog/unreleased.md +++ b/winit/src/changelog/unreleased.md @@ -112,3 +112,4 @@ changelog entry. - On macOS, fix a panic and incorrect cursor position in Ime::Preedit when the preedit string contains special characters (ie. emojis) caused by incorrect UTF-16 to UTF-8 offset conversion. - On Wayland, fix a protocol error when setting a custom cursor on compositors with `wl_surface` version below 3. - On Redox, fix `run_app_on_demand` exiting immediately after a previous `run_app_on_demand` called `exit`. +- On Redox, handle window closes during `ApplicationHandler` drop.