From 425edab298421d873ba5f2a04f8ff76a8ed45e54 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 22 Jun 2019 00:21:32 +0300 Subject: [PATCH] Move Screens property to WindowBase since they are in IWindowBaseImpl anyway --- src/Avalonia.Controls/Primitives/PopupRoot.cs | 2 +- src/Avalonia.Controls/Screens.cs | 5 +++-- src/Avalonia.Controls/Window.cs | 3 --- src/Avalonia.Controls/WindowBase.cs | 3 +++ 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Controls/Primitives/PopupRoot.cs b/src/Avalonia.Controls/Primitives/PopupRoot.cs index 90020839d6..d2e8f1ab92 100644 --- a/src/Avalonia.Controls/Primitives/PopupRoot.cs +++ b/src/Avalonia.Controls/Primitives/PopupRoot.cs @@ -80,7 +80,7 @@ namespace Avalonia.Controls.Primitives /// public void SnapInsideScreenEdges() { - var screen = Application.Current.MainWindow?.Screens.ScreenFromPoint(Position); + var screen = (VisualRoot as WindowBase)?.Screens?.ScreenFromPoint(Position); if (screen != null) { diff --git a/src/Avalonia.Controls/Screens.cs b/src/Avalonia.Controls/Screens.cs index 0f0adec790..8a0a0fa728 100644 --- a/src/Avalonia.Controls/Screens.cs +++ b/src/Avalonia.Controls/Screens.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using Avalonia.Platform; using Avalonia.Utilities; @@ -11,7 +12,7 @@ namespace Avalonia.Controls private readonly IScreenImpl _iScreenImpl; public int ScreenCount => _iScreenImpl.ScreenCount; - public IReadOnlyList All => _iScreenImpl?.AllScreens; + public IReadOnlyList All => _iScreenImpl?.AllScreens ?? Array.Empty(); public Screen Primary => All.FirstOrDefault(x => x.Primary); public Screens(IScreenImpl iScreenImpl) diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 01614ba87b..2265e89af3 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -140,7 +140,6 @@ namespace Avalonia.Controls impl.Closing = HandleClosing; impl.WindowStateChanged = HandleWindowStateChanged; _maxPlatformClientSize = PlatformImpl?.MaxClientSize ?? default(Size); - Screens = new Screens(PlatformImpl?.Screen); } /// @@ -157,8 +156,6 @@ namespace Avalonia.Controls remove { _nameScope.Unregistered -= value; } } - public Screens Screens { get; private set; } - /// /// Gets the platform-specific window implementation. /// diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs index 363af05a0b..40c9fc94d2 100644 --- a/src/Avalonia.Controls/WindowBase.cs +++ b/src/Avalonia.Controls/WindowBase.cs @@ -63,6 +63,7 @@ namespace Avalonia.Controls public WindowBase(IWindowBaseImpl impl, IAvaloniaDependencyResolver dependencyResolver) : base(impl, dependencyResolver) { + Screens = new Screens(PlatformImpl?.Screen); impl.Activated = HandleActivated; impl.Deactivated = HandleDeactivated; impl.PositionChanged = HandlePositionChanged; @@ -108,6 +109,8 @@ namespace Avalonia.Controls impl.Position = value; } } + + public Screens Screens { get; private set; } /// /// Whether an auto-size operation is in progress.