Browse Source

Fix auto-sizing on secondary monitors on win32.

- Allow nested calls to `BeginAutoSizing` - previously it was called twice when showing a window on a secondary monitor and when the second `using` block exited it cleared the autosizing state despite the outer block not completing
- Call `SetWindowStartupLocation` within the auto-sizing block. Moving to a secondary monitor causes a resize message.
pull/4478/head
Steven Kirk 6 years ago
parent
commit
7a325af366
  1. 2
      src/Avalonia.Controls/Window.cs
  2. 11
      src/Avalonia.Controls/WindowBase.cs

2
src/Avalonia.Controls/Window.cs

@ -652,8 +652,8 @@ namespace Avalonia.Controls
PlatformImpl?.Show(); PlatformImpl?.Show();
Renderer?.Start(); Renderer?.Start();
SetWindowStartupLocation(Owner?.PlatformImpl);
} }
SetWindowStartupLocation(Owner?.PlatformImpl);
OnOpened(EventArgs.Empty); OnOpened(EventArgs.Empty);
} }

11
src/Avalonia.Controls/WindowBase.cs

@ -39,6 +39,7 @@ namespace Avalonia.Controls
public static readonly StyledProperty<bool> TopmostProperty = public static readonly StyledProperty<bool> TopmostProperty =
AvaloniaProperty.Register<WindowBase, bool>(nameof(Topmost)); AvaloniaProperty.Register<WindowBase, bool>(nameof(Topmost));
private int _autoSizing;
private bool _hasExecutedInitialLayoutPass; private bool _hasExecutedInitialLayoutPass;
private bool _isActive; private bool _isActive;
private bool _ignoreVisibilityChange; private bool _ignoreVisibilityChange;
@ -97,11 +98,7 @@ namespace Avalonia.Controls
/// <summary> /// <summary>
/// Whether an auto-size operation is in progress. /// Whether an auto-size operation is in progress.
/// </summary> /// </summary>
protected bool AutoSizing protected bool AutoSizing => _autoSizing > 0;
{
get;
private set;
}
/// <summary> /// <summary>
/// Gets or sets the owner of the window. /// Gets or sets the owner of the window.
@ -186,8 +183,8 @@ namespace Avalonia.Controls
/// </remarks> /// </remarks>
protected IDisposable BeginAutoSizing() protected IDisposable BeginAutoSizing()
{ {
AutoSizing = true; ++_autoSizing;
return Disposable.Create(() => AutoSizing = false); return Disposable.Create(() => --_autoSizing);
} }
/// <summary> /// <summary>

Loading…
Cancel
Save