From 2bef4dc540d250afede2a557478289550c9beecf Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 20 Feb 2020 14:55:58 +0300 Subject: [PATCH] Always notify gesture recognizers about the loss of pointer capture --- .../GestureRecognizers/GestureRecognizerCollection.cs | 9 ++++++--- .../GestureRecognizers/IGestureRecognizer.cs | 2 +- .../GestureRecognizers/ScrollGestureRecognizer.cs | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs b/src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs index 91b224e65a..112abb1a4e 100644 --- a/src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs +++ b/src/Avalonia.Input/GestureRecognizers/GestureRecognizerCollection.cs @@ -111,9 +111,7 @@ namespace Avalonia.Input.GestureRecognizers _pointerGrabs.Remove(e.Pointer); foreach (var r in _recognizers) { - if(e.Handled) - break; - r.PointerCaptureLost(e); + r.PointerCaptureLost(e.Pointer); } } @@ -121,6 +119,11 @@ namespace Avalonia.Input.GestureRecognizers { pointer.Capture(_inputElement); _pointerGrabs[pointer] = recognizer; + foreach (var r in _recognizers) + { + if (r != recognizer) + r.PointerCaptureLost(pointer); + } } } diff --git a/src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs b/src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs index b8ba9e529c..c1d9ae5304 100644 --- a/src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs +++ b/src/Avalonia.Input/GestureRecognizers/IGestureRecognizer.cs @@ -6,7 +6,7 @@ namespace Avalonia.Input.GestureRecognizers void PointerPressed(PointerPressedEventArgs e); void PointerReleased(PointerReleasedEventArgs e); void PointerMoved(PointerEventArgs e); - void PointerCaptureLost(PointerCaptureLostEventArgs e); + void PointerCaptureLost(IPointer pointer); } public interface IGestureRecognizerActionsDispatcher diff --git a/src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs b/src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs index a582fae8b5..e022401c8e 100644 --- a/src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs +++ b/src/Avalonia.Input/GestureRecognizers/ScrollGestureRecognizer.cs @@ -116,9 +116,9 @@ namespace Avalonia.Input.GestureRecognizers } } - public void PointerCaptureLost(PointerCaptureLostEventArgs e) + public void PointerCaptureLost(IPointer pointer) { - if (e.Pointer == _tracking) EndGesture(); + if (pointer == _tracking) EndGesture(); } void EndGesture()