diff options
author | 2024-02-09 08:40:50 -0500 | |
---|---|---|
committer | 2024-02-13 04:35:00 +0100 | |
commit | 3a80fece32f22a5d519a6a87ed29935268d0756c (patch) | |
tree | 7942e3e626dbaba9fd1396ef12b3dd87593f25bb /winit/src/multi_window.rs | |
parent | dc2cba92646392fa78a14f768d98ad5f15b9f182 (diff) | |
download | iced-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.rs | 32 |
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(()) } |