Skip to content

Commit 7a1e105

Browse files
authored
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.
2 parents dc2cba9 + 3a80fec commit 7a1e105

2 files changed

Lines changed: 32 additions & 3 deletions

File tree

winit/src/application.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,8 @@ where
250250
if matches!(
251251
event,
252252
winit::event::Event::WindowEvent {
253-
event: winit::event::WindowEvent::Resized(_),
253+
event: winit::event::WindowEvent::Resized(_)
254+
| winit::event::WindowEvent::Moved(_),
254255
..
255256
}
256257
) {

winit/src/multi_window.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ where
211211

212212
let mut context = task::Context::from_waker(task::noop_waker_ref());
213213

214-
let _ = event_loop.run(move |event, event_loop| {
214+
let process_event = move |event, event_loop: &winit::event_loop::EventLoopWindowTarget<_>| {
215215
if event_loop.exiting() {
216216
return;
217217
}
@@ -280,7 +280,35 @@ where
280280
}
281281
};
282282
}
283-
});
283+
};
284+
285+
#[cfg(not(target_os = "windows"))]
286+
let _ = event_loop.run(process_event);
287+
288+
// TODO: Remove when unnecessary
289+
// On Windows, we emulate an `AboutToWait` event after every `Resized` event
290+
// since the event loop does not resume during resize interaction.
291+
// More details: https://github.com/rust-windowing/winit/issues/3272
292+
#[cfg(target_os = "windows")]
293+
{
294+
let mut process_event = process_event;
295+
296+
let _ = event_loop.run(move |event, event_loop| {
297+
if matches!(
298+
event,
299+
winit::event::Event::WindowEvent {
300+
event: winit::event::WindowEvent::Resized(_)
301+
| winit::event::WindowEvent::Moved(_),
302+
..
303+
}
304+
) {
305+
process_event(event, event_loop);
306+
process_event(winit::event::Event::AboutToWait, event_loop);
307+
} else {
308+
process_event(event, event_loop);
309+
}
310+
});
311+
}
284312

285313
Ok(())
286314
}

0 commit comments

Comments
 (0)