diff --git a/winit-win32/src/window_state.rs b/winit-win32/src/window_state.rs index ed06d76042..f1e480f337 100644 --- a/winit-win32/src/window_state.rs +++ b/winit-win32/src/window_state.rs @@ -344,7 +344,10 @@ impl WindowFlags { return; } - if new.contains(WindowFlags::VISIBLE) { + if new.contains(WindowFlags::VISIBLE) + && !new.contains(WindowFlags::MAXIMIZED) + && !new.contains(WindowFlags::MINIMIZED) + { let flag = if !self.contains(WindowFlags::MARKER_ACTIVATE) { self.set(WindowFlags::MARKER_ACTIVATE, true); SW_SHOWNOACTIVATE @@ -379,7 +382,9 @@ impl WindowFlags { } } - if diff.contains(WindowFlags::MAXIMIZED) || new.contains(WindowFlags::MAXIMIZED) { + if new.contains(WindowFlags::VISIBLE) + && (diff.contains(WindowFlags::MAXIMIZED) || new.contains(WindowFlags::MAXIMIZED)) + { unsafe { ShowWindow(window, match new.contains(WindowFlags::MAXIMIZED) { true => SW_MAXIMIZE, @@ -389,7 +394,9 @@ impl WindowFlags { } // Minimize operations should execute after maximize for proper window animations - if diff.contains(WindowFlags::MINIMIZED) { + if new.contains(WindowFlags::VISIBLE) + && (diff.contains(WindowFlags::MINIMIZED) || new.contains(WindowFlags::MINIMIZED)) + { unsafe { ShowWindow(window, match new.contains(WindowFlags::MINIMIZED) { true => SW_MINIMIZE, diff --git a/winit/src/changelog/unreleased.md b/winit/src/changelog/unreleased.md index 729bfd639b..658ed4ae1f 100644 --- a/winit/src/changelog/unreleased.md +++ b/winit/src/changelog/unreleased.md @@ -61,3 +61,4 @@ changelog entry. - On Wayland, switch from using the `ahash` hashing algorithm to `foldhash`. - On macOS, fix borderless game presentation options not sticking after switching spaces. - On macOS, fix IME being locked on (regardless of requests to disable) after being enabled once. +- On Windows, avoid briefly showing hidden windows when applying maximized or minimized state.