summaryrefslogtreecommitdiffstats
path: root/winit/src/multi_window.rs
diff options
context:
space:
mode:
authorLibravatar dtzxporter <dtzxporter@users.noreply.github.com>2024-02-09 08:40:50 -0500
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-02-13 04:35:00 +0100
commit3a80fece32f22a5d519a6a87ed29935268d0756c (patch)
tree7942e3e626dbaba9fd1396ef12b3dd87593f25bb /winit/src/multi_window.rs
parentdc2cba92646392fa78a14f768d98ad5f15b9f182 (diff)
downloadiced-3a80fece32f22a5d519a6a87ed29935268d0756c.tar.gz
iced-3a80fece32f22a5d519a6a87ed29935268d0756c.tar.bz2
iced-3a80fece32f22a5d519a6a87ed29935268d0756c.zip
Implement win32 workaround for multi_window application as well. Also trigger AboutToWait for Moved as well.
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(())
}