Browse Source

Use the owner window's screen as the constraint. (#15910)

#14982 added some logic from WPF to contrain a window showed with `WindowStartupLocation.CenterOwner` to the screen, but it had a bug: the screen used was the screen that the window being _shown) is currently on, not the _owner_ window.

This means that if the owner window is on a different screen to the window being shown then it will be constrained to the wrong screen.

You can see this on Windows by showing a child `Window` with `CenterOwner` when the owner window is on a secondary screen: the child window will initially be shown on the primary screen and so the constraint will be wrong, resulting in the child window being shown on the wrong screen.
pull/15929/head
Steven Kirk 2 years ago
committed by GitHub
parent
commit
f0226b70fe
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      src/Avalonia.Controls/Window.cs

2
src/Avalonia.Controls/Window.cs

@ -976,7 +976,7 @@ namespace Avalonia.Controls
PixelSize.FromSize(ownerSize, scaling));
var childRect = ownerRect.CenterRect(rect);
if (Screens.ScreenFromWindow(this)?.WorkingArea is { } constraint)
if (Screens.ScreenFromWindow(owner)?.WorkingArea is { } constraint)
{
var maxX = constraint.Right - rect.Width;
var maxY = constraint.Bottom - rect.Height;

Loading…
Cancel
Save