diff options
Diffstat (limited to 'winit/src')
| -rw-r--r-- | winit/src/application.rs | 3 | ||||
| -rw-r--r-- | winit/src/multi_window.rs | 32 | 
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(())  } | 
