summaryrefslogtreecommitdiffstats
path: root/winit/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector@hecrj.dev>2024-02-13 04:43:21 +0100
committerLibravatar GitHub <noreply@github.com>2024-02-13 04:43:21 +0100
commit7a1e10503697b68a4d6206551c34702ec8a69b79 (patch)
tree7942e3e626dbaba9fd1396ef12b3dd87593f25bb /winit/src
parentdc2cba92646392fa78a14f768d98ad5f15b9f182 (diff)
parent3a80fece32f22a5d519a6a87ed29935268d0756c (diff)
downloadiced-7a1e10503697b68a4d6206551c34702ec8a69b79.tar.gz
iced-7a1e10503697b68a4d6206551c34702ec8a69b79.tar.bz2
iced-7a1e10503697b68a4d6206551c34702ec8a69b79.zip
Merge pull request #2242 from dtzxporter/workaround-windows-issue-pt2
Implement win32 workaround for multi_window application as well. Also trigger AboutToWait for Moved as well.
Diffstat (limited to 'winit/src')
-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(())
}