diff --git a/src/Avalonia.Base/Input/PointerOverPreProcessor.cs b/src/Avalonia.Base/Input/PointerOverPreProcessor.cs index 0afdb8e080..8ab7327ca4 100644 --- a/src/Avalonia.Base/Input/PointerOverPreProcessor.cs +++ b/src/Avalonia.Base/Input/PointerOverPreProcessor.cs @@ -42,12 +42,15 @@ namespace Avalonia.Input } if (args.Type is RawPointerEventType.LeaveWindow or RawPointerEventType.NonClientLeftButtonDown - && _currentPointer is var (lastPointer, lastPosition)) + or RawPointerEventType.TouchCancel or RawPointerEventType.TouchEnd) { - _currentPointer = null; - ClearPointerOver(lastPointer, args.Root, 0, PointToClient(args.Root, lastPosition), - new PointerPointProperties(args.InputModifiers, args.Type.ToUpdateKind()), - args.InputModifiers.ToKeyModifiers()); + if (_currentPointer is var (lastPointer, lastPosition)) + { + _currentPointer = null; + ClearPointerOver(lastPointer, args.Root, 0, PointToClient(args.Root, lastPosition), + new PointerPointProperties(args.InputModifiers, args.Type.ToUpdateKind()), + args.InputModifiers.ToKeyModifiers()); + } } else if (pointerDevice.TryGetPointer(args) is { } pointer && pointer.Type != PointerType.Touch)