Browse Source

Rename SystemDecorations to WindowDecorations since they aren't necessary "system". (#20796)

* Rename SystemDecorations to WindowDecorations since they aren't necessary system.

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
pull/20804/head
Nikita Tsukanov 3 weeks ago
committed by GitHub
parent
commit
ba43523daf
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 60
      api/Avalonia.nupkg.xml
  2. 10
      samples/ControlCatalog/DecoratedWindow.xaml
  3. 6
      samples/ControlCatalog/MainView.xaml
  4. 6
      samples/ControlCatalog/MainView.xaml.cs
  5. 6
      samples/IntegrationTestApp/Pages/WindowPage.axaml.cs
  6. 2
      samples/IntegrationTestApp/ShowWindowTest.axaml
  7. 4
      src/Avalonia.Controls/Platform/IWindowImpl.cs
  8. 35
      src/Avalonia.Controls/Window.cs
  9. 2
      src/Avalonia.DesignerSupport/Remote/PreviewerWindowImpl.cs
  10. 2
      src/Avalonia.DesignerSupport/Remote/Stubs.cs
  11. 6
      src/Avalonia.Native/WindowImpl.cs
  12. 24
      src/Avalonia.X11/X11Window.cs
  13. 2
      src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs
  14. 2
      src/Windows/Avalonia.Win32/EmbeddedWindowImpl.cs
  15. 2
      src/Windows/Avalonia.Win32/PopupImpl.cs
  16. 2
      src/Windows/Avalonia.Win32/TrayIconImpl.cs
  17. 2
      src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs
  18. 22
      src/Windows/Avalonia.Win32/WindowImpl.cs
  19. 20
      tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs
  20. 16
      tests/Avalonia.IntegrationTests.Win32/ExtendClientAreaWindowTests.cs
  21. 16
      tests/Avalonia.IntegrationTests.Win32/StandardWindowTests.cs

60
api/Avalonia.nupkg.xml

@ -385,6 +385,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.SystemDecorations</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0001</DiagnosticId> <DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.SystemDialog</Target> <Target>T:Avalonia.Controls.SystemDialog</Target>
@ -811,6 +817,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.SystemDecorations</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0001</DiagnosticId> <DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.SystemDialog</Target> <Target>T:Avalonia.Controls.SystemDialog</Target>
@ -1489,6 +1501,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.Window.SystemDecorationsProperty</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.AppBuilder.get_LifetimeOverride</Target> <Target>M:Avalonia.AppBuilder.get_LifetimeOverride</Target>
@ -1867,6 +1885,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Window.get_SystemDecorations</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Window.set_ExtendClientAreaChromeHints(Avalonia.Platform.ExtendClientAreaChromeHints)</Target> <Target>M:Avalonia.Controls.Window.set_ExtendClientAreaChromeHints(Avalonia.Platform.ExtendClientAreaChromeHints)</Target>
@ -1897,6 +1921,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Platform.IWindowImpl.SetSystemDecorations(Avalonia.Controls.SystemDecorations)</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Platform.Screen.#ctor(System.Double,Avalonia.PixelRect,Avalonia.PixelRect,System.Boolean)</Target> <Target>M:Avalonia.Platform.Screen.#ctor(System.Double,Avalonia.PixelRect,Avalonia.PixelRect,System.Boolean)</Target>
@ -2665,6 +2695,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.Window.SystemDecorationsProperty</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.AppBuilder.get_LifetimeOverride</Target> <Target>M:Avalonia.AppBuilder.get_LifetimeOverride</Target>
@ -3043,6 +3079,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Window.get_SystemDecorations</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Window.set_ExtendClientAreaChromeHints(Avalonia.Platform.ExtendClientAreaChromeHints)</Target> <Target>M:Avalonia.Controls.Window.set_ExtendClientAreaChromeHints(Avalonia.Platform.ExtendClientAreaChromeHints)</Target>
@ -3073,6 +3115,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Platform.IWindowImpl.SetSystemDecorations(Avalonia.Controls.SystemDecorations)</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Platform.Screen.#ctor(System.Double,Avalonia.PixelRect,Avalonia.PixelRect,System.Boolean)</Target> <Target>M:Avalonia.Platform.Screen.#ctor(System.Double,Avalonia.PixelRect,Avalonia.PixelRect,System.Boolean)</Target>
@ -3331,6 +3379,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>M:Avalonia.Platform.IWindowImpl.SetWindowDecorations(Avalonia.Controls.WindowDecorations)</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0006</DiagnosticId> <DiagnosticId>CP0006</DiagnosticId>
<Target>M:Avalonia.Platform.IWindowingPlatform.GetWindowsZOrder(System.ReadOnlySpan{Avalonia.Platform.IWindowImpl},System.Span{System.Int64})</Target> <Target>M:Avalonia.Platform.IWindowingPlatform.GetWindowsZOrder(System.ReadOnlySpan{Avalonia.Platform.IWindowImpl},System.Span{System.Int64})</Target>
@ -3547,6 +3601,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>M:Avalonia.Platform.IWindowImpl.SetWindowDecorations(Avalonia.Controls.WindowDecorations)</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0006</DiagnosticId> <DiagnosticId>CP0006</DiagnosticId>
<Target>M:Avalonia.Platform.IWindowingPlatform.GetWindowsZOrder(System.ReadOnlySpan{Avalonia.Platform.IWindowImpl},System.Span{System.Int64})</Target> <Target>M:Avalonia.Platform.IWindowingPlatform.GetWindowsZOrder(System.ReadOnlySpan{Avalonia.Platform.IWindowImpl},System.Span{System.Int64})</Target>

10
samples/ControlCatalog/DecoratedWindow.xaml

@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.DecoratedWindow" x:Class="ControlCatalog.DecoratedWindow"
Title="Avalonia Control Gallery" Title="Avalonia Control Gallery"
SystemDecorations="None" Name="Window"> WindowDecorations="None" Name="Window">
<NativeMenu.Menu> <NativeMenu.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="Decorated"> <NativeMenuItem Header="Decorated">
@ -43,11 +43,11 @@
<StackPanel> <StackPanel>
<TextBlock>Hello world!</TextBlock> <TextBlock>Hello world!</TextBlock>
<ComboBox SelectedItem="{Binding ElementName=Window, Path=SystemDecorations}"> <ComboBox SelectedItem="{Binding ElementName=Window, Path=WindowDecorations}">
<ComboBox.Items> <ComboBox.Items>
<SystemDecorations>None</SystemDecorations> <WindowDecorations>None</WindowDecorations>
<SystemDecorations>BorderOnly</SystemDecorations> <WindowDecorations>BorderOnly</WindowDecorations>
<SystemDecorations>Full</SystemDecorations> <WindowDecorations>Full</WindowDecorations>
</ComboBox.Items> </ComboBox.Items>
</ComboBox> </ComboBox>
<CheckBox IsChecked="{Binding ElementName=Window, Path=CanResize}">CanResize</CheckBox> <CheckBox IsChecked="{Binding ElementName=Window, Path=CanResize}">CanResize</CheckBox>

6
samples/ControlCatalog/MainView.xaml

@ -218,9 +218,9 @@
SelectionChanged="Decorations_SelectionChanged" SelectionChanged="Decorations_SelectionChanged"
ToolTip.Tip="System Decorations"> ToolTip.Tip="System Decorations">
<ComboBox.Items> <ComboBox.Items>
<SystemDecorations>None</SystemDecorations> <WindowDecorations>None</WindowDecorations>
<SystemDecorations>BorderOnly</SystemDecorations> <WindowDecorations>BorderOnly</WindowDecorations>
<SystemDecorations>Full</SystemDecorations> <WindowDecorations>Full</WindowDecorations>
</ComboBox.Items> </ComboBox.Items>
</ComboBox> </ComboBox>
<ComboBox HorizontalAlignment="Stretch" <ComboBox HorizontalAlignment="Stretch"

6
samples/ControlCatalog/MainView.xaml.cs

@ -45,9 +45,9 @@ namespace ControlCatalog
private void Decorations_SelectionChanged(object? sender, SelectionChangedEventArgs e) private void Decorations_SelectionChanged(object? sender, SelectionChangedEventArgs e)
{ {
if (TopLevel.GetTopLevel(this) is Window window && e.AddedItems.Count > 0 && e.AddedItems[0] is SystemDecorations systemDecorations) if (TopLevel.GetTopLevel(this) is Window window && e.AddedItems.Count > 0 && e.AddedItems[0] is WindowDecorations systemDecorations)
{ {
window.SystemDecorations = systemDecorations; window.WindowDecorations = systemDecorations;
} }
} }
@ -79,7 +79,7 @@ namespace ControlCatalog
base.OnAttachedToVisualTree(e); base.OnAttachedToVisualTree(e);
if (TopLevel.GetTopLevel(this) is Window window) if (TopLevel.GetTopLevel(this) is Window window)
Decorations.SelectedIndex = (int)window.SystemDecorations; Decorations.SelectedIndex = (int)window.WindowDecorations;
var insets = TopLevel.GetTopLevel(this)!.InsetsManager; var insets = TopLevel.GetTopLevel(this)!.InsetsManager;
if (insets != null) if (insets != null)

6
samples/IntegrationTestApp/Pages/WindowPage.axaml.cs

@ -51,7 +51,7 @@ public partial class WindowPage : UserControl
ShowWindowSize.Text = string.Empty; ShowWindowSize.Text = string.Empty;
window.ExtendClientAreaToDecorationsHint = ShowWindowExtendClientAreaToDecorationsHint.IsChecked ?? false; window.ExtendClientAreaToDecorationsHint = ShowWindowExtendClientAreaToDecorationsHint.IsChecked ?? false;
window.SystemDecorations = (SystemDecorations)ShowWindowSystemDecorations.SelectedIndex; window.WindowDecorations = (WindowDecorations)ShowWindowSystemDecorations.SelectedIndex;
window.WindowState = (WindowState)ShowWindowState.SelectedIndex; window.WindowState = (WindowState)ShowWindowState.SelectedIndex;
switch (ShowWindowMode.SelectedIndex) switch (ShowWindowMode.SelectedIndex)
@ -87,7 +87,7 @@ public partial class WindowPage : UserControl
{ {
Title = "Transparent Window", Title = "Transparent Window",
Name = "TransparentWindow", Name = "TransparentWindow",
SystemDecorations = SystemDecorations.None, WindowDecorations = WindowDecorations.None,
Background = Brushes.Transparent, Background = Brushes.Transparent,
TransparencyLevelHint = new[] { WindowTransparencyLevel.Transparent }, TransparencyLevelHint = new[] { WindowTransparencyLevel.Transparent },
WindowStartupLocation = WindowStartupLocation.CenterOwner, WindowStartupLocation = WindowStartupLocation.CenterOwner,
@ -136,7 +136,7 @@ public partial class WindowPage : UserControl
Width = 200, Width = 200,
Height = 200, Height = 200,
Background = Brushes.Green, Background = Brushes.Green,
SystemDecorations = SystemDecorations.None, WindowDecorations = WindowDecorations.None,
WindowStartupLocation = WindowStartupLocation.CenterOwner, WindowStartupLocation = WindowStartupLocation.CenterOwner,
Content = new Border Content = new Border
{ {

2
samples/IntegrationTestApp/ShowWindowTest.axaml

@ -45,7 +45,7 @@
</ComboBox> </ComboBox>
<Label Grid.Column="0" Grid.Row="8">SystemDecorations</Label> <Label Grid.Column="0" Grid.Row="8">SystemDecorations</Label>
<ComboBox Name="CurrentSystemDecorations" Grid.Column="1" Grid.Row="8" SelectedIndex="{Binding SystemDecorations}"> <ComboBox Name="CurrentSystemDecorations" Grid.Column="1" Grid.Row="8" SelectedIndex="{Binding WindowDecorations}">
<ComboBoxItem Name="SystemDecorationsNone">None</ComboBoxItem> <ComboBoxItem Name="SystemDecorationsNone">None</ComboBoxItem>
<ComboBoxItem Name="SystemDecorationsBorderOnly">BorderOnly</ComboBoxItem> <ComboBoxItem Name="SystemDecorationsBorderOnly">BorderOnly</ComboBoxItem>
<ComboBoxItem Name="SystemDecorationsFull">Full</ComboBoxItem> <ComboBoxItem Name="SystemDecorationsFull">Full</ComboBoxItem>

4
src/Avalonia.Controls/Platform/IWindowImpl.cs

@ -46,9 +46,9 @@ namespace Avalonia.Platform
Action? GotInputWhenDisabled { get; set; } Action? GotInputWhenDisabled { get; set; }
/// <summary> /// <summary>
/// Enables or disables system window decorations (title bar, buttons, etc) /// Enables or disables window decorations (title bar, buttons, etc)
/// </summary> /// </summary>
void SetSystemDecorations(SystemDecorations enabled); void SetWindowDecorations(WindowDecorations enabled);
/// <summary> /// <summary>
/// Sets the icon of this window. /// Sets the icon of this window.

35
src/Avalonia.Controls/Window.cs

@ -45,9 +45,9 @@ namespace Avalonia.Controls
} }
/// <summary> /// <summary>
/// Determines system decorations (title bar, border, etc) for a <see cref="Window"/> /// Determines window decorations (title bar, border, etc) for a <see cref="Window"/>
/// </summary> /// </summary>
public enum SystemDecorations public enum WindowDecorations
{ {
/// <summary> /// <summary>
/// No decorations /// No decorations
@ -132,10 +132,10 @@ namespace Avalonia.Controls
o => o.OffScreenMargin); o => o.OffScreenMargin);
/// <summary> /// <summary>
/// Defines the <see cref="SystemDecorations"/> property. /// Defines the <see cref="WindowDecorations"/> property.
/// </summary> /// </summary>
public static readonly StyledProperty<SystemDecorations> SystemDecorationsProperty = public static readonly StyledProperty<WindowDecorations> WindowDecorationsProperty =
AvaloniaProperty.Register<Window, SystemDecorations>(nameof(SystemDecorations), SystemDecorations.Full); AvaloniaProperty.Register<Window, WindowDecorations>(nameof(WindowDecorations), WindowDecorations.Full);
/// <summary> /// <summary>
/// Defines the <see cref="ShowActivated"/> property. /// Defines the <see cref="ShowActivated"/> property.
@ -357,12 +357,19 @@ namespace Avalonia.Controls
} }
/// <summary> /// <summary>
/// Sets the system decorations (title bar, border, etc) /// Gets or sets the window decorations (title bar, border, etc).
/// </summary> /// </summary>
public SystemDecorations SystemDecorations public WindowDecorations WindowDecorations
{ {
get => GetValue(SystemDecorationsProperty); get => GetValue(WindowDecorationsProperty);
set => SetValue(SystemDecorationsProperty, value); set => SetValue(WindowDecorationsProperty, value);
}
[Obsolete("Use WindowDecorations instead.")]
public WindowDecorations SystemDecorations
{
get => WindowDecorations;
set => WindowDecorations = value;
} }
/// <summary> /// <summary>
@ -676,10 +683,10 @@ namespace Avalonia.Controls
{ {
var platformNeeds = PlatformImpl?.RequestedDrawnDecorations ?? PlatformRequestedDrawnDecoration.None; var platformNeeds = PlatformImpl?.RequestedDrawnDecorations ?? PlatformRequestedDrawnDecoration.None;
var parts = Chrome.DrawnWindowDecorationParts.None; var parts = Chrome.DrawnWindowDecorationParts.None;
if (SystemDecorations != SystemDecorations.None) if (WindowDecorations != WindowDecorations.None)
{ {
if (platformNeeds.HasFlag(PlatformRequestedDrawnDecoration.TitleBar) && if (platformNeeds.HasFlag(PlatformRequestedDrawnDecoration.TitleBar) &&
SystemDecorations == SystemDecorations.Full) WindowDecorations == WindowDecorations.Full)
parts |= Chrome.DrawnWindowDecorationParts.TitleBar; parts |= Chrome.DrawnWindowDecorationParts.TitleBar;
if (platformNeeds.HasFlag(PlatformRequestedDrawnDecoration.Shadow)) if (platformNeeds.HasFlag(PlatformRequestedDrawnDecoration.Shadow))
parts |= Chrome.DrawnWindowDecorationParts.Shadow; parts |= Chrome.DrawnWindowDecorationParts.Shadow;
@ -1343,11 +1350,11 @@ namespace Avalonia.Controls
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{ {
base.OnPropertyChanged(change); base.OnPropertyChanged(change);
if (change.Property == SystemDecorationsProperty) if (change.Property == WindowDecorationsProperty)
{ {
var (_, typedNewValue) = change.GetOldAndNewValue<SystemDecorations>(); var (_, typedNewValue) = change.GetOldAndNewValue<WindowDecorations>();
PlatformImpl?.SetSystemDecorations(typedNewValue); PlatformImpl?.SetWindowDecorations(typedNewValue);
} }
else if (change.Property == OwnerProperty) else if (change.Property == OwnerProperty)

2
src/Avalonia.DesignerSupport/Remote/PreviewerWindowImpl.cs

@ -124,7 +124,7 @@ namespace Avalonia.DesignerSupport.Remote
{ {
} }
public void SetSystemDecorations(SystemDecorations enabled) public void SetWindowDecorations(WindowDecorations enabled)
{ {
} }

2
src/Avalonia.DesignerSupport/Remote/Stubs.cs

@ -138,7 +138,7 @@ namespace Avalonia.DesignerSupport.Remote
{ {
} }
public void SetSystemDecorations(SystemDecorations enabled) public void SetWindowDecorations(WindowDecorations enabled)
{ {
} }

6
src/Avalonia.Native/WindowImpl.cs

@ -20,7 +20,7 @@ namespace Avalonia.Native
private readonly ITopLevelNativeMenuExporter _nativeMenuExporter; private readonly ITopLevelNativeMenuExporter _nativeMenuExporter;
private bool _canResize = true; private bool _canResize = true;
private bool _canMaximize = true; private bool _canMaximize = true;
private Controls.SystemDecorations _decorations = Controls.SystemDecorations.Full; private Controls.WindowDecorations _decorations = Controls.WindowDecorations.Full;
internal WindowImpl(IAvaloniaNativeFactory factory, AvaloniaNativePlatformOptions opts) : base(factory) internal WindowImpl(IAvaloniaNativeFactory factory, AvaloniaNativePlatformOptions opts) : base(factory)
{ {
@ -91,7 +91,7 @@ namespace Avalonia.Native
_native.SetCanMaximize(value.AsComBool()); _native.SetCanMaximize(value.AsComBool());
} }
public void SetSystemDecorations(Controls.SystemDecorations enabled) public void SetWindowDecorations(Controls.WindowDecorations enabled)
{ {
_decorations = enabled; _decorations = enabled;
_native.SetDecorations((Interop.SystemDecorations)enabled); _native.SetDecorations((Interop.SystemDecorations)enabled);
@ -186,7 +186,7 @@ namespace Avalonia.Native
if(_native is MicroComProxyBase pb && pb.IsDisposed) if(_native is MicroComProxyBase pb && pb.IsDisposed)
return; return;
if (WindowState == WindowState.FullScreen || !_isExtended || _decorations != Controls.SystemDecorations.Full) if (WindowState == WindowState.FullScreen || !_isExtended || _decorations != Controls.WindowDecorations.Full)
{ {
ExtendedMargins = new Thickness(); ExtendedMargins = new Thickness();
} }

24
src/Avalonia.X11/X11Window.cs

@ -317,7 +317,7 @@ namespace Avalonia.X11
MotifDecorations.Maximize | MotifDecorations.Minimize | MotifDecorations.ResizeH; MotifDecorations.Maximize | MotifDecorations.Minimize | MotifDecorations.ResizeH;
if (_popup if (_popup
|| _systemDecorations == SystemDecorations.None) || _windowDecorations == WindowDecorations.None)
decorations = 0; decorations = 0;
var isDisabled = !IsEnabled; var isDisabled = !IsEnabled;
@ -695,7 +695,7 @@ namespace Avalonia.X11
private Thickness? GetFrameExtents() private Thickness? GetFrameExtents()
{ {
if (_systemDecorations != SystemDecorations.Full) if (_windowDecorations != WindowDecorations.Full)
return new Thickness(0); return new Thickness(0);
XGetWindowProperty(_x11.Display, _handle, _x11.Atoms._NET_FRAME_EXTENTS, IntPtr.Zero, XGetWindowProperty(_x11.Display, _handle, _x11.Atoms._NET_FRAME_EXTENTS, IntPtr.Zero,
@ -865,8 +865,8 @@ namespace Avalonia.X11
return rv; return rv;
} }
private SystemDecorations _requestedSystemDecorations = SystemDecorations.Full; private WindowDecorations _requestedWindowDecorations = WindowDecorations.Full;
private SystemDecorations _systemDecorations = SystemDecorations.Full; private WindowDecorations _windowDecorations = WindowDecorations.Full;
private bool _canResize = true; private bool _canResize = true;
private bool _canMinimize = true; private bool _canMinimize = true;
private bool _canMaximize = true; private bool _canMaximize = true;
@ -1179,9 +1179,9 @@ namespace Avalonia.X11
public PixelPoint PointToScreen(Point point) => _mode.PointToScreen(point); public PixelPoint PointToScreen(Point point) => _mode.PointToScreen(point);
public void SetSystemDecorations(SystemDecorations enabled) public void SetWindowDecorations(WindowDecorations enabled)
{ {
_requestedSystemDecorations = enabled; _requestedWindowDecorations = enabled;
UpdateEffectiveSystemDecorations(); UpdateEffectiveSystemDecorations();
} }
@ -1189,15 +1189,15 @@ namespace Avalonia.X11
{ {
// When extending client area, always hide WM decorations (we draw our own) // When extending client area, always hide WM decorations (we draw our own)
var effective = _extendClientAreaToDecorations var effective = _extendClientAreaToDecorations
? SystemDecorations.None ? WindowDecorations.None
: (_requestedSystemDecorations == SystemDecorations.Full : (_requestedWindowDecorations == WindowDecorations.Full
? SystemDecorations.Full ? WindowDecorations.Full
: SystemDecorations.None); : WindowDecorations.None);
if (_systemDecorations == effective) if (_windowDecorations == effective)
return; return;
_systemDecorations = effective; _windowDecorations = effective;
UpdateMotifHints(); UpdateMotifHints();
UpdateSizeHints(null); UpdateSizeHints(null);
} }

2
src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs

@ -398,7 +398,7 @@ namespace Avalonia.Headless
} }
public void SetSystemDecorations(SystemDecorations enabled) public void SetWindowDecorations(WindowDecorations enabled)
{ {
} }

2
src/Windows/Avalonia.Win32/EmbeddedWindowImpl.cs

@ -14,7 +14,7 @@ namespace Avalonia.Win32
IsResizable = false, IsResizable = false,
IsMinimizable = false, IsMinimizable = false,
IsMaximizable = false, IsMaximizable = false,
Decorations = SystemDecorations.None Decorations = WindowDecorations.None
}; };
} }

2
src/Windows/Avalonia.Win32/PopupImpl.cs

@ -113,7 +113,7 @@ namespace Avalonia.Win32
IsResizable = false, IsResizable = false,
IsMinimizable = false, IsMinimizable = false,
IsMaximizable = false, IsMaximizable = false,
Decorations = SystemDecorations.None, Decorations = WindowDecorations.None,
}; };
_parent = parent; _parent = parent;

2
src/Windows/Avalonia.Win32/TrayIconImpl.cs

@ -231,7 +231,7 @@ namespace Avalonia.Win32
var _trayMenu = new TrayPopupRoot var _trayMenu = new TrayPopupRoot
{ {
Name = "AvaloniaTrayPopupRoot_" + _tooltipText, Name = "AvaloniaTrayPopupRoot_" + _tooltipText,
SystemDecorations = SystemDecorations.None, WindowDecorations = WindowDecorations.None,
SizeToContent = SizeToContent.WidthAndHeight, SizeToContent = SizeToContent.WidthAndHeight,
Background = null, Background = null,
TransparencyLevelHint = new[] { WindowTransparencyLevel.Transparent }, TransparencyLevelHint = new[] { WindowTransparencyLevel.Transparent },

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

@ -60,7 +60,7 @@ namespace Avalonia.Win32
case WindowsMessage.WM_NCCALCSIZE when ToInt32(wParam) == 1: case WindowsMessage.WM_NCCALCSIZE when ToInt32(wParam) == 1:
{ {
if (_windowProperties.Decorations == SystemDecorations.None) if (_windowProperties.Decorations == WindowDecorations.None)
return IntPtr.Zero; return IntPtr.Zero;
// When the client area is extended into the frame, we are still requesting the standard styles matching // When the client area is extended into the frame, we are still requesting the standard styles matching

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

@ -139,7 +139,7 @@ namespace Avalonia.Win32
IsResizable = true, IsResizable = true,
IsMinimizable = true, IsMinimizable = true,
IsMaximizable = true, IsMaximizable = true,
Decorations = SystemDecorations.Full Decorations = WindowDecorations.Full
}; };
var surfaceFactory = AvaloniaLocator.Current.GetService<IWindowsSurfaceFactory>(); var surfaceFactory = AvaloniaLocator.Current.GetService<IWindowsSurfaceFactory>();
@ -544,7 +544,7 @@ namespace Avalonia.Win32
} }
} }
private bool HasFullDecorations => _windowProperties.Decorations == SystemDecorations.Full; private bool HasFullDecorations => _windowProperties.Decorations == WindowDecorations.Full;
public void Move(PixelPoint point) => Position = point; public void Move(PixelPoint point) => Position = point;
@ -596,7 +596,7 @@ namespace Avalonia.Win32
{ {
// We told Windows we have a caption, but since we're actually extending into it, // We told Windows we have a caption, but since we're actually extending into it,
// it should be excluded from the final window bounds. // it should be excluded from the final window bounds.
if (_windowProperties.Decorations != SystemDecorations.None) if (_windowProperties.Decorations != WindowDecorations.None)
{ {
var borderOnlyRect = ClientRectToWindowRect(requestedClientRect, WindowStyles.WS_BORDER); var borderOnlyRect = ClientRectToWindowRect(requestedClientRect, WindowStyles.WS_BORDER);
requestedWindowRect.top = borderOnlyRect.top; requestedWindowRect.top = borderOnlyRect.top;
@ -893,7 +893,7 @@ namespace Avalonia.Win32
UpdateWindowProperties(newWindowProperties); UpdateWindowProperties(newWindowProperties);
} }
public void SetSystemDecorations(SystemDecorations value) public void SetWindowDecorations(WindowDecorations value)
{ {
var newWindowProperties = _windowProperties; var newWindowProperties = _windowProperties;
@ -1149,7 +1149,7 @@ namespace Avalonia.Win32
borderCaptionThickness.left *= -1; borderCaptionThickness.left *= -1;
borderCaptionThickness.top *= -1; borderCaptionThickness.top *= -1;
if (_windowProperties.Decorations == SystemDecorations.Full) if (_windowProperties.Decorations == WindowDecorations.Full)
{ {
if (_extendTitleBarHint != -1) if (_extendTitleBarHint != -1)
borderCaptionThickness.top = (int)(_extendTitleBarHint * RenderScaling); borderCaptionThickness.top = (int)(_extendTitleBarHint * RenderScaling);
@ -1294,7 +1294,7 @@ namespace Avalonia.Win32
newWindowProperties.WindowState = state; newWindowProperties.WindowState = state;
UpdateWindowProperties(newWindowProperties, newWindowProperties.Decorations != SystemDecorations.Full); UpdateWindowProperties(newWindowProperties, newWindowProperties.Decorations != WindowDecorations.Full);
if (command.HasValue) if (command.HasValue)
{ {
@ -1466,7 +1466,7 @@ namespace Avalonia.Win32
switch (newProperties.Decorations) switch (newProperties.Decorations)
{ {
case SystemDecorations.Full: case WindowDecorations.Full:
style |= WindowStyles.WS_BORDER | WindowStyles.WS_CAPTION | WindowStyles.WS_SYSMENU; style |= WindowStyles.WS_BORDER | WindowStyles.WS_CAPTION | WindowStyles.WS_SYSMENU;
if (newProperties.IsMinimizable) if (newProperties.IsMinimizable)
@ -1477,12 +1477,12 @@ namespace Avalonia.Win32
break; break;
case SystemDecorations.BorderOnly: case WindowDecorations.BorderOnly:
style |= WindowStyles.WS_BORDER; style |= WindowStyles.WS_BORDER;
break; break;
} }
if (newProperties.Decorations != SystemDecorations.None && newProperties.IsResizable) if (newProperties.Decorations != WindowDecorations.None && newProperties.IsResizable)
style |= WindowStyles.WS_THICKFRAME; style |= WindowStyles.WS_THICKFRAME;
var windowStates = GetWindowStateStyles(); var windowStates = GetWindowStateStyles();
@ -1508,7 +1508,7 @@ namespace Avalonia.Win32
if (!_isFullScreenActive && ((oldProperties.Decorations != newProperties.Decorations) || forceChanges)) if (!_isFullScreenActive && ((oldProperties.Decorations != newProperties.Decorations) || forceChanges))
{ {
var margin = newProperties.Decorations == SystemDecorations.BorderOnly ? 1 : 0; var margin = newProperties.Decorations == WindowDecorations.BorderOnly ? 1 : 0;
var margins = new MARGINS var margins = new MARGINS
{ {
@ -1655,7 +1655,7 @@ namespace Avalonia.Win32
public bool IsResizable; public bool IsResizable;
public bool IsMinimizable; public bool IsMinimizable;
public bool IsMaximizable; public bool IsMaximizable;
public SystemDecorations Decorations; public WindowDecorations Decorations;
public bool IsFullScreen; public bool IsFullScreen;
public WindowState WindowState; public WindowState WindowState;
} }

20
tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs

@ -345,13 +345,13 @@ namespace Avalonia.IntegrationTests.Appium
} }
[PlatformTheory(TestPlatforms.MacOS)] [PlatformTheory(TestPlatforms.MacOS)]
[InlineData(SystemDecorations.None)] [InlineData(WindowDecorations.None)]
[InlineData(SystemDecorations.BorderOnly)] [InlineData(WindowDecorations.BorderOnly)]
[InlineData(SystemDecorations.Full)] [InlineData(WindowDecorations.Full)]
public void ExtendClientArea_SystemDecorations_Shows_Correct_Buttons(SystemDecorations decorations) public void ExtendClientArea_SystemDecorations_Shows_Correct_Buttons(WindowDecorations decorations)
{ {
// #10650 // #10650
using (OpenWindow(extendClientArea: true, systemDecorations: decorations)) using (OpenWindow(extendClientArea: true, windowDecorations: decorations))
{ {
var secondaryWindow = GetWindow("SecondaryWindow"); var secondaryWindow = GetWindow("SecondaryWindow");
@ -359,7 +359,7 @@ namespace Avalonia.IntegrationTests.Appium
{ {
var chrome = secondaryWindow.GetSystemChromeButtons(); var chrome = secondaryWindow.GetSystemChromeButtons();
if (decorations == SystemDecorations.Full) if (decorations == WindowDecorations.Full)
{ {
Assert.NotNull(chrome.Close); Assert.NotNull(chrome.Close);
Assert.NotNull(chrome.Minimize); Assert.NotNull(chrome.Minimize);
@ -374,7 +374,7 @@ namespace Avalonia.IntegrationTests.Appium
} }
finally finally
{ {
if (decorations != SystemDecorations.Full) if (decorations != WindowDecorations.Full)
{ {
secondaryWindow.FindElementByAccessibilityId("CurrentSystemDecorations").Click(); secondaryWindow.FindElementByAccessibilityId("CurrentSystemDecorations").Click();
Session.FindElementByAccessibilityId("SystemDecorationsFull").SendClick(); Session.FindElementByAccessibilityId("SystemDecorationsFull").SendClick();
@ -388,7 +388,7 @@ namespace Avalonia.IntegrationTests.Appium
ShowWindowMode mode = ShowWindowMode.NonOwned, ShowWindowMode mode = ShowWindowMode.NonOwned,
WindowStartupLocation location = WindowStartupLocation.Manual, WindowStartupLocation location = WindowStartupLocation.Manual,
bool canResize = true, bool canResize = true,
SystemDecorations systemDecorations = SystemDecorations.Full, WindowDecorations windowDecorations = WindowDecorations.Full,
bool extendClientArea = false) bool extendClientArea = false)
{ {
var sizeTextBox = Session.FindElementByAccessibilityId("ShowWindowSize"); var sizeTextBox = Session.FindElementByAccessibilityId("ShowWindowSize");
@ -417,10 +417,10 @@ namespace Avalonia.IntegrationTests.Appium
if (canResizeCheckBox.GetIsChecked() != canResize) if (canResizeCheckBox.GetIsChecked() != canResize)
canResizeCheckBox.Click(); canResizeCheckBox.Click();
if (systemDecorationsComboBox.GetComboBoxValue() != systemDecorations.ToString()) if (systemDecorationsComboBox.GetComboBoxValue() != windowDecorations.ToString())
{ {
systemDecorationsComboBox.Click(); systemDecorationsComboBox.Click();
Session.FindElementByName(systemDecorations.ToString()).SendClick(); Session.FindElementByName(windowDecorations.ToString()).SendClick();
} }
if (extendClientAreaCheckBox.GetIsChecked() != extendClientArea) if (extendClientAreaCheckBox.GetIsChecked() != extendClientArea)

16
tests/Avalonia.IntegrationTests.Win32/ExtendClientAreaWindowTests.cs

@ -26,7 +26,7 @@ public abstract class ExtendClientAreaWindowTests : IDisposable
} }
} }
protected abstract SystemDecorations Decorations { get; } protected abstract WindowDecorations Decorations { get; }
public static MatrixTheoryData<bool, WindowState> States public static MatrixTheoryData<bool, WindowState> States
=> new([true, false], Enum.GetValues<WindowState>()); => new([true, false], Enum.GetValues<WindowState>());
@ -39,7 +39,7 @@ public abstract class ExtendClientAreaWindowTests : IDisposable
{ {
CanResize = canResize, CanResize = canResize,
WindowState = state, WindowState = state,
SystemDecorations = Decorations, WindowDecorations = Decorations,
ExtendClientAreaToDecorationsHint = true, ExtendClientAreaToDecorationsHint = true,
Width = ClientWidth, Width = ClientWidth,
Height = ClientHeight, Height = ClientHeight,
@ -160,8 +160,8 @@ public abstract class ExtendClientAreaWindowTests : IDisposable
public sealed class DecorationsFull : ExtendClientAreaWindowTests public sealed class DecorationsFull : ExtendClientAreaWindowTests
{ {
protected override SystemDecorations Decorations protected override WindowDecorations Decorations
=> SystemDecorations.Full; => WindowDecorations.Full;
protected override void VerifyNormalState(bool canResize) protected override void VerifyNormalState(bool canResize)
{ {
@ -182,8 +182,8 @@ public abstract class ExtendClientAreaWindowTests : IDisposable
public sealed class DecorationsBorderOnly : ExtendClientAreaWindowTests public sealed class DecorationsBorderOnly : ExtendClientAreaWindowTests
{ {
protected override SystemDecorations Decorations protected override WindowDecorations Decorations
=> SystemDecorations.BorderOnly; => WindowDecorations.BorderOnly;
protected override void VerifyNormalState(bool canResize) protected override void VerifyNormalState(bool canResize)
{ {
@ -197,8 +197,8 @@ public abstract class ExtendClientAreaWindowTests : IDisposable
public sealed class DecorationsNone : ExtendClientAreaWindowTests public sealed class DecorationsNone : ExtendClientAreaWindowTests
{ {
protected override SystemDecorations Decorations protected override WindowDecorations Decorations
=> SystemDecorations.None; => WindowDecorations.None;
protected override void VerifyNormalState(bool canResize) protected override void VerifyNormalState(bool canResize)
{ {

16
tests/Avalonia.IntegrationTests.Win32/StandardWindowTests.cs

@ -27,7 +27,7 @@ public abstract class StandardWindowTests : IDisposable
} }
} }
protected abstract SystemDecorations Decorations { get; } protected abstract WindowDecorations Decorations { get; }
protected abstract bool HasCaption { get; } protected abstract bool HasCaption { get; }
@ -42,7 +42,7 @@ public abstract class StandardWindowTests : IDisposable
{ {
CanResize = canResize, CanResize = canResize,
WindowState = state, WindowState = state,
SystemDecorations = Decorations, WindowDecorations = Decorations,
ExtendClientAreaToDecorationsHint = false, ExtendClientAreaToDecorationsHint = false,
Width = ClientWidth, Width = ClientWidth,
Height = ClientHeight, Height = ClientHeight,
@ -108,8 +108,8 @@ public abstract class StandardWindowTests : IDisposable
public sealed class DecorationsFull : StandardWindowTests public sealed class DecorationsFull : StandardWindowTests
{ {
protected override SystemDecorations Decorations protected override WindowDecorations Decorations
=> SystemDecorations.Full; => WindowDecorations.Full;
protected override bool HasCaption protected override bool HasCaption
=> true; => true;
@ -117,8 +117,8 @@ public abstract class StandardWindowTests : IDisposable
public sealed class DecorationsBorderOnly : StandardWindowTests public sealed class DecorationsBorderOnly : StandardWindowTests
{ {
protected override SystemDecorations Decorations protected override WindowDecorations Decorations
=> SystemDecorations.BorderOnly; => WindowDecorations.BorderOnly;
protected override bool HasCaption protected override bool HasCaption
=> false; => false;
@ -126,8 +126,8 @@ public abstract class StandardWindowTests : IDisposable
public sealed class DecorationsNone : StandardWindowTests public sealed class DecorationsNone : StandardWindowTests
{ {
protected override SystemDecorations Decorations protected override WindowDecorations Decorations
=> SystemDecorations.None; => WindowDecorations.None;
protected override bool HasCaption protected override bool HasCaption
=> false; => false;

Loading…
Cancel
Save