diff --git a/winit/src/lib.rs b/winit/src/lib.rs index 5f5fcfa4..06d8f950 100644 --- a/winit/src/lib.rs +++ b/winit/src/lib.rs @@ -49,6 +49,7 @@ pub use error::Error; pub use proxy::Proxy; use winit::dpi::LogicalSize; use winit::dpi::PhysicalPosition; +use winit::dpi::PhysicalSize; use crate::core::mouse; use crate::core::renderer; @@ -1283,17 +1284,18 @@ async fn run_instance
( proxy.free_slots(actions); actions = 0; } + let skip = events.is_empty() && messages.is_empty(); - if events.is_empty() - && messages.is_empty() - && window_manager.is_idle() - { + if skip && window_manager.is_idle() { continue; } let mut uis_stale = false; - + let mut resized = false; for (id, window) in window_manager.iter_mut() { + if skip && !window.resize_enabled { + continue; + } let interact_span = debug::interact(id); let mut window_events = vec![]; @@ -1306,9 +1308,13 @@ async fn run_instance
( } }); - if window_events.is_empty() && messages.is_empty() { - continue; - } + let no_window_events = window_events.is_empty(); + #[cfg(feature = "wayland")] + window_events.push(core::Event::PlatformSpecific( + core::event::PlatformSpecific::Wayland( + core::event::wayland::Event::RequestResize, + ), + )); let (ui_state, statuses) = user_interfaces .get_mut(&id) @@ -1320,10 +1326,49 @@ async fn run_instance
(
&mut clipboard,
&mut messages,
);
+ let mut needs_redraw =
+ !no_window_events || !messages.is_empty();
+ if let Some(requested_size) =
+ clipboard.requested_logical_size.lock().unwrap().take()
+ {
+ let requested_physical_size: PhysicalSize Window