From 8cf28faf8003fb8aff5c99b55150ca9a138f36d0 Mon Sep 17 00:00:00 2001 From: Tom Edwards <109803929+TomEdwardsEnscape@users.noreply.github.com> Date: Wed, 20 Mar 2024 20:38:18 +0100 Subject: [PATCH] Use ShowWindowCommand.Hide when positioning a win32 window that has not yet been shown (#15035) --- src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs | 3 +++ src/Windows/Avalonia.Win32/WindowImpl.cs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs index 0070581e1d..e22e3aa51a 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs @@ -618,6 +618,9 @@ namespace Avalonia.Win32 SizeCommand.Maximized => WindowState.Maximized, SizeCommand.Minimized => WindowState.Minimized, _ when _isFullScreenActive => WindowState.FullScreen, + // Ignore state changes for unshown windows. We always tell Windows that we are hidden + // until shown, so the OS value should be ignored while we are in the unshown state. + _ when !_shown => _lastWindowState, _ => WindowState.Normal, }; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 7589f2457e..7a022d1c0d 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -607,7 +607,7 @@ namespace Avalonia.Win32 windowPlacement.NormalPosition = requestedWindowRect; - windowPlacement.ShowCmd = _lastWindowState switch + windowPlacement.ShowCmd = !_shown ? ShowWindowCommand.Hide : _lastWindowState switch { WindowState.Minimized => ShowWindowCommand.ShowMinNoActive, WindowState.Maximized => ShowWindowCommand.ShowMaximized,