Browse Source

Not-really settable property is a cursed concept

pull/20915/head
Nikita Tsukanov 12 hours ago
parent
commit
c6ea5a393a
  1. 4
      src/Avalonia.Controls/Window.cs
  2. 3
      src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs
  3. 6
      src/Windows/Avalonia.Win32/WindowImpl.cs

4
src/Avalonia.Controls/Window.cs

@ -421,10 +421,12 @@ namespace Avalonia.Controls
{
PlatformImpl.WindowState = value;
var oldValue = _windowStateForPropertyNotifications;
_windowStateForPropertyNotifications = PlatformImpl.WindowState;
// If the request was refused - trigger a synthetic property change
if (PlatformImpl.WindowState != value)
{
_windowStateForPropertyNotifications = PlatformImpl.WindowState;
RaisePropertyChanged(WindowStateProperty, oldValue, _windowStateForPropertyNotifications);
}
}
}
}

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

@ -739,7 +739,8 @@ namespace Avalonia.Win32
_ => WindowState.Normal,
};
var stateChanged = windowState != _lastWindowState;
var stateChanged = windowState != _lastWindowState
|| windowState != _effectiveWindowState;
_lastWindowState = windowState;
if (Resized != null &&

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

@ -95,7 +95,10 @@ namespace Avalonia.Win32
private double _scaling = 1;
private uint _dpi = 96;
private WindowState _showWindowState;
// Window state, set from various places in code
private WindowState _lastWindowState;
// Window state, set exclusively from WM_SIZE handler before triggering the state change event
private WindowState? _effectiveWindowState;
private OleDropTarget? _dropTarget;
private Size _minSize;
private Size _maxSize;
@ -207,8 +210,7 @@ namespace Avalonia.Win32
public Action<double>? ScalingChanged { get; set; }
public Action<PixelPoint>? PositionChanged { get; set; }
private WindowState? _effectiveWindowState;
public Action<WindowState>? WindowStateChanged { get; set; }
public Action? LostFocus { get; set; }

Loading…
Cancel
Save