diff --git a/src/platform_impl/windows/event_loop.rs b/src/platform_impl/windows/event_loop.rs index 639a93865d..610a43e132 100644 --- a/src/platform_impl/windows/event_loop.rs +++ b/src/platform_impl/windows/event_loop.rs @@ -2299,17 +2299,19 @@ unsafe fn public_window_callback_inner( }; } - unsafe { - SetWindowPos( - window, - 0, - new_outer_rect.left, - new_outer_rect.top, - new_outer_rect.right - new_outer_rect.left, - new_outer_rect.bottom - new_outer_rect.top, - SWP_NOZORDER | SWP_NOACTIVATE, - ) - }; + if !userdata.window_state_lock().currently_repositioning { + unsafe { + SetWindowPos( + window, + 0, + new_outer_rect.left, + new_outer_rect.top, + new_outer_rect.right - new_outer_rect.left, + new_outer_rect.bottom - new_outer_rect.top, + SWP_NOZORDER | SWP_NOACTIVATE, + ) + }; + } result = ProcResult::Value(0); }, diff --git a/src/platform_impl/windows/window.rs b/src/platform_impl/windows/window.rs index 23fec32b34..4864511cfe 100644 --- a/src/platform_impl/windows/window.rs +++ b/src/platform_impl/windows/window.rs @@ -823,6 +823,7 @@ impl Window { let position: (i32, i32) = monitor.position().into(); let size: (u32, u32) = monitor.size().into(); + window_state.lock().unwrap().currently_repositioning = true; unsafe { SetWindowPos( window, @@ -835,6 +836,7 @@ impl Window { ); InvalidateRgn(window, 0, false.into()); } + window_state.lock().unwrap().currently_repositioning = false; }, None => { let mut window_state_lock = window_state.lock().unwrap(); diff --git a/src/platform_impl/windows/window_state.rs b/src/platform_impl/windows/window_state.rs index 911467b4c7..935dc06b96 100644 --- a/src/platform_impl/windows/window_state.rs +++ b/src/platform_impl/windows/window_state.rs @@ -56,6 +56,8 @@ pub(crate) struct WindowState { pub dragging: bool, pub skip_taskbar: bool, + + pub currently_repositioning: bool } #[derive(Clone)] @@ -176,6 +178,8 @@ impl WindowState { dragging: false, skip_taskbar: false, + + currently_repositioning: false } }