summaryrefslogtreecommitdiffstats
path: root/winit/src/multi_window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'winit/src/multi_window.rs')
-rw-r--r--winit/src/multi_window.rs32
1 files changed, 30 insertions, 2 deletions
diff --git a/winit/src/multi_window.rs b/winit/src/multi_window.rs
index ed00abdf..72cd939f 100644
--- a/winit/src/multi_window.rs
+++ b/winit/src/multi_window.rs
@@ -211,7 +211,7 @@ where
let mut context = task::Context::from_waker(task::noop_waker_ref());
- let _ = event_loop.run(move |event, event_loop| {
+ let process_event = move |event, event_loop: &winit::event_loop::EventLoopWindowTarget<_>| {
if event_loop.exiting() {
return;
}
@@ -280,7 +280,35 @@ where
}
};
}
- });
+ };
+
+ #[cfg(not(target_os = "windows"))]
+ let _ = event_loop.run(process_event);
+
+ // TODO: Remove when unnecessary
+ // On Windows, we emulate an `AboutToWait` event after every `Resized` event
+ // since the event loop does not resume during resize interaction.
+ // More details: https://github.com/rust-windowing/winit/issues/3272
+ #[cfg(target_os = "windows")]
+ {
+ let mut process_event = process_event;
+
+ let _ = event_loop.run(move |event, event_loop| {
+ if matches!(
+ event,
+ winit::event::Event::WindowEvent {
+ event: winit::event::WindowEvent::Resized(_)
+ | winit::event::WindowEvent::Moved(_),
+ ..
+ }
+ ) {
+ process_event(event, event_loop);
+ process_event(winit::event::Event::AboutToWait, event_loop);
+ } else {
+ process_event(event, event_loop);
+ }
+ });
+ }
Ok(())
}