Browse Source

add WindowState to window properties in win32 window impl (#13536)

Emmanuel Hansen 1 year ago
parent
commit
56d2d0cc8a

+ 6 - 0
src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs

@@ -615,6 +615,12 @@ namespace Avalonia.Win32
                         {
                             _lastWindowState = windowState;
 
+                            var newWindowProperties = _windowProperties;
+
+                            newWindowProperties.WindowState = windowState;
+
+                            UpdateWindowProperties(newWindowProperties);
+
                             WindowStateChanged?.Invoke(windowState);
 
                             if (_isClientAreaExtended)

+ 6 - 3
src/Windows/Avalonia.Win32/WindowImpl.cs

@@ -1087,6 +1087,8 @@ namespace Avalonia.Win32
                     throw new ArgumentException("Invalid WindowState.");
             }
 
+            newWindowProperties.WindowState = state;
+
             UpdateWindowProperties(newWindowProperties);
 
             if (command.HasValue)
@@ -1292,7 +1294,7 @@ namespace Avalonia.Win32
                 if (IsWindowVisible(_hwnd))
                     style |= WindowStyles.WS_VISIBLE;
 
-                if (newProperties.IsResizable)
+                if (newProperties.IsResizable || newProperties.WindowState == WindowState.Maximized)
                 {
                     style |= WindowStyles.WS_SIZEFRAME;
                     style |= WindowStyles.WS_MAXIMIZEBOX;
@@ -1303,7 +1305,7 @@ namespace Avalonia.Win32
                     style &= ~WindowStyles.WS_MAXIMIZEBOX;
                 }
 
-                const WindowStyles fullDecorationFlags = WindowStyles.WS_CAPTION | WindowStyles.WS_SYSMENU;
+                const WindowStyles fullDecorationFlags = WindowStyles.WS_CAPTION | WindowStyles.WS_SYSMENU | WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER;
 
                 if (newProperties.Decorations == SystemDecorations.Full)
                 {
@@ -1313,7 +1315,7 @@ namespace Avalonia.Win32
                 {
                     style &= ~fullDecorationFlags;
 
-                    if (newProperties.Decorations == SystemDecorations.BorderOnly && WindowState != WindowState.Maximized)
+                    if (newProperties.Decorations == SystemDecorations.BorderOnly && newProperties.WindowState != WindowState.Maximized)
                     {
                         style |= WindowStyles.WS_THICKFRAME | WindowStyles.WS_BORDER;
                     }
@@ -1487,6 +1489,7 @@ namespace Avalonia.Win32
             public bool IsResizable;
             public SystemDecorations Decorations;
             public bool IsFullScreen;
+            public WindowState WindowState;
         }
 
         private struct ResizeReasonScope : IDisposable