diff --git a/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs b/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs index 8d35a91e00..d8de813d47 100644 --- a/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs +++ b/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs @@ -45,6 +45,7 @@ Copyright © 2019 Nikita Tsukanov */ using System; +using Avalonia.Input; using Avalonia.Metadata; using Avalonia.VisualTree; using Avalonia.Media; @@ -452,16 +453,14 @@ namespace Avalonia.Controls.Primitives.PopupPositioning PopupPositionerConstraintAdjustment constraintAdjustment, Rect? rect, FlowDirection flowDirection) { - // We need a better way for tracking the last pointer position -#pragma warning disable CS0618 // Type or member is obsolete - var pointer = topLevel.PointToClient(topLevel.PlatformImpl?.MouseDevice.Position ?? default); -#pragma warning restore CS0618 // Type or member is obsolete - positionerParameters.Offset = offset; positionerParameters.ConstraintAdjustment = constraintAdjustment; if (placement == PlacementMode.Pointer) { - positionerParameters.AnchorRectangle = new Rect(pointer, new Size(1, 1)); + // We need a better way for tracking the last pointer position + var position = topLevel.PointToClient(topLevel.LastPointerPosition ?? default); + + positionerParameters.AnchorRectangle = new Rect(position, new Size(1, 1)); positionerParameters.Anchor = PopupAnchor.TopLeft; positionerParameters.Gravity = PopupGravity.BottomRight; } diff --git a/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs b/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs index e800f2f4b0..3bc0593813 100644 --- a/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs +++ b/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs @@ -12,7 +12,6 @@ using Avalonia.Remote.Protocol; using Avalonia.Remote.Protocol.Input; using Avalonia.Remote.Protocol.Viewport; using Avalonia.Threading; -using InputModifiers = Avalonia.Input.InputModifiers; using Key = Avalonia.Input.Key; using PixelFormat = Avalonia.Platform.PixelFormat; using ProtocolPixelFormat = Avalonia.Remote.Protocol.Viewport.PixelFormat; diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 5c5053b982..7d0a1d2c39 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -285,6 +285,8 @@ namespace Avalonia.Controls /// public IRenderer Renderer { get; private set; } + internal PixelPoint? LastPointerPosition => _pointerOverPreProcessor?.LastPosition; + /// /// Gets the access key handler for the window. ///