Skip to content

Commit

Permalink
make lastPointerPosition trackable at the drag event
Browse files Browse the repository at this point in the history
make _lastKnownPosition trackable at dragging

adding additional comments regarding fix

delete unnecessary lines
  • Loading branch information
AnastassiaP committed Feb 7, 2025
1 parent 98a388d commit 27c6ace
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions src/Avalonia.Base/Input/PointerOverPreProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,21 @@ public void OnError(Exception error)

public void OnNext(RawInputEventArgs value)
{
if (value is RawPointerEventArgs args
&& args.Root == _inputRoot
&& value.Device is IPointerDevice pointerDevice)
if (value is RawDragEvent dragArgs)
{
// When a platform drag operation is in progress, the application does not receive
// pointer move events until after the drop event. This is a problem because if a
// popup is shown at the pointer position in the drop event, it will be shown at
// the position at which the drag was initiated, not the position at which the drop
// occurred.
//
// Solve this by updating the last known pointer position when a drag event occurs.
_lastKnownPosition = ((Visual)_inputRoot).PointToScreen(dragArgs.Location);
}

else if (value is RawPointerEventArgs args
&& args.Root == _inputRoot
&& value.Device is IPointerDevice pointerDevice)
{
if (pointerDevice != _lastActivePointerDevice)
{
Expand Down

0 comments on commit 27c6ace

Please sign in to comment.