Skip to content

Commit 4c9d7ec

Browse files
authored
Fixed 'OnDrop' event not called when 'IPointerDownHandler' is also listened. (#1988)
1 parent 9c476d1 commit 4c9d7ec

2 files changed

Lines changed: 7 additions & 4 deletions

File tree

Packages/com.unity.inputsystem/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ however, it has to be formatted properly to pass verification tests.
1616
- Fixed InputDeviceTester sample only visualizing a given touch contact once. [ISXB-1017](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-1017)
1717
- Fixed an update loop in the asset editor that occurs when selecting an Action Map that has no Actions.
1818
- Fixed Package compilation when Unity Analytics module is not enabled on 2022.3. [ISXB-996](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-996)
19+
- Fixed 'OnDrop' event not called when 'IPointerDownHandler' is also listened. [ISXB-1014](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-1014)
1920

2021
### Added
2122
- Added Hinge Angle sensor support for foldable devices.

Packages/com.unity.inputsystem/InputSystem/Plugins/UI/InputSystemUIInputModule.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -496,10 +496,12 @@ private void ProcessPointerButton(ref PointerModel.ButtonState button, PointerEv
496496
// Invoke OnPointerDown, if present.
497497
var newPressed = ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.pointerDownHandler);
498498

499+
var pointerClickHandler = ExecuteEvents.GetEventHandler<IPointerClickHandler>(currentOverGo);
500+
499501
// If no GO responded to OnPointerDown, look for one that responds to OnPointerClick.
500502
// NOTE: This only looks up the handler. We don't invoke OnPointerClick here.
501503
if (newPressed == null)
502-
newPressed = ExecuteEvents.GetEventHandler<IPointerClickHandler>(currentOverGo);
504+
newPressed = pointerClickHandler;
503505

504506
// Reset click state if delay to last release was too long or if we didn't
505507
// press on the same object as last time. The latter part we don't know until
@@ -515,7 +517,7 @@ private void ProcessPointerButton(ref PointerModel.ButtonState button, PointerEv
515517
// become null.
516518
eventData.pointerPress = newPressed;
517519
#if UNITY_2020_1_OR_NEWER // pointerClick doesn't exist before this.
518-
eventData.pointerClick = ExecuteEvents.GetEventHandler<IPointerClickHandler>(currentOverGo);
520+
eventData.pointerClick = pointerClickHandler;
519521
#endif
520522
eventData.rawPointerPress = currentOverGo;
521523

@@ -538,9 +540,9 @@ private void ProcessPointerButton(ref PointerModel.ButtonState button, PointerEv
538540
// click and OnPointerClick is thus never invoked.
539541
var pointerClickHandler = ExecuteEvents.GetEventHandler<IPointerClickHandler>(currentOverGo);
540542
#if UNITY_2020_1_OR_NEWER
541-
var isClick = eventData.pointerClick == pointerClickHandler && eventData.eligibleForClick;
543+
var isClick = eventData.pointerClick != null && eventData.pointerClick == pointerClickHandler && eventData.eligibleForClick;
542544
#else
543-
var isClick = eventData.pointerPress == pointerClickHandler && eventData.eligibleForClick;
545+
var isClick = eventData.pointerPress != null && eventData.pointerPress == pointerClickHandler && eventData.eligibleForClick;
544546
#endif
545547
if (isClick)
546548
{

0 commit comments

Comments
 (0)