summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winit/src/application.rs3
-rw-r--r--winit/src/multi_window.rs32
2 files changed, 32 insertions, 3 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 0fc67adc..ad461738 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -250,7 +250,8 @@ where
if matches!(
event,
winit::event::Event::WindowEvent {
- event: winit::event::WindowEvent::Resized(_),
+ event: winit::event::WindowEvent::Resized(_)
+ | winit::event::WindowEvent::Moved(_),
..
}
) {
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(())
}