From 73022c3f6cd8ec6dc9fe09772157e3416aa1c9fd Mon Sep 17 00:00:00 2001 From: natepiano Date: Thu, 5 Mar 2026 20:45:27 -0500 Subject: [PATCH] fix: process window position before size in changed_windows Move the position block above the resolution block so the window is on the correct monitor (and scale_factor() returns the target monitor's value) before request_inner_size runs. This is a prerequisite for the winit fix to set_outer_position's scale factor resolution (rust-windowing/winit#4440). --- crates/bevy_winit/src/system.rs | 38 +++++++++++++++++---------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/crates/bevy_winit/src/system.rs b/crates/bevy_winit/src/system.rs index f8518580bfd79..c4ff0950d0f4c 100644 --- a/crates/bevy_winit/src/system.rs +++ b/crates/bevy_winit/src/system.rs @@ -354,6 +354,26 @@ pub(crate) fn changed_windows( } } + // Set position before size so the window is on the correct monitor + // (and thus using the correct scale factor) when size is applied. + if window.position != cache.position + && let Some(position) = crate::winit_window_position( + &window.position, + &window.resolution, + &monitors, + winit_window.primary_monitor(), + winit_window.current_monitor(), + ) { + let should_set = match winit_window.outer_position() { + Ok(current_position) => current_position != position, + _ => true, + }; + + if should_set { + winit_window.set_outer_position(position); + } + } + if window.resolution != cache.resolution { let mut physical_size = PhysicalSize::new( window.resolution.physical_width(), @@ -444,24 +464,6 @@ pub(crate) fn changed_windows( ); } - if window.position != cache.position - && let Some(position) = crate::winit_window_position( - &window.position, - &window.resolution, - &monitors, - winit_window.primary_monitor(), - winit_window.current_monitor(), - ) { - let should_set = match winit_window.outer_position() { - Ok(current_position) => current_position != position, - _ => true, - }; - - if should_set { - winit_window.set_outer_position(position); - } - } - if let Some(maximized) = window.internal.take_maximize_request() { winit_window.set_maximized(maximized); }