Browse Source

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

pull/13673/head
Emmanuel Hansen 3 years ago
committed by GitHub
parent
commit
56d2d0cc8a
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs
  2. 9
      src/Windows/Avalonia.Win32/WindowImpl.cs

6
src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs

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

9
src/Windows/Avalonia.Win32/WindowImpl.cs

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

Loading…
Cancel
Save