-
Notifications
You must be signed in to change notification settings - Fork 325
FIX: Pen touch input triggers UI/Click action two times (ISXB-1456) #2201
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅ @@ Coverage Diff @@
## develop #2201 +/- ##
===========================================
- Coverage 68.11% 68.11% -0.01%
===========================================
Files 367 367
Lines 53610 53603 -7
===========================================
- Hits 36519 36512 -7
Misses 17091 17091
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
fb31fe7
to
96b6291
Compare
This fixes ISXB-687 and adds a test.
bd091b8
to
4343463
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
A fix for double-firing UI click events when pen and touch input arrive simultaneously.
- Updated pointer removal logic to handle empty state lists and only decrement indices when removal actually occurs.
- Simplified filtering to immediately remove non–mouse/pen pointers when a mouse or pen event is detected.
- Expanded UITests with cleanup steps, simultaneous mouse+touch scenarios, and a test for disabling the UI module during a click.
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
File | Description |
---|---|
Packages/com.unity.inputsystem/.../InputSystemUIInputModule.cs | Reordered empty-state check, moved the assert, removed legacy touch-delay logic, and refined removal in Process. |
Assets/Tests/InputSystem/Plugins/UITests.cs | Added touch cleanup, new simultaneous-input tests, and a disabling-module-during-click test. |
Comments suppressed due to low confidence (3)
Assets/Tests/InputSystem/Plugins/UITests.cs:1536
- [nitpick] The method name ends with a duplicate "Works"; consider renaming to improve clarity (e.g.,
UI_DisablingEventSystemOnClickWorksWithTouchPointers
).
public IEnumerator UI_DisablingEventSystemOnClickEventWorksWithTouchPointersWorks()
Packages/com.unity.inputsystem/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:2075
- Consider validating that the
index
parameter is also less thanm_PointerStates.length
before accessingm_PointerStates[index]
to avoid potential out-of-range errors.
if (m_PointerStates.length == 0)
Assets/Tests/InputSystem/Plugins/UITests.cs:1464
- The same touch ID (
1
) is used for ending touches on different devices; ensure eachEndTouch
call uses the matching ID from its correspondingBeginTouch
.
EndTouch(1, secondPosition, screen: touch1);
if (state.pointerType == UIPointerType.Touch && (state.leftButton.isPressed || state.leftButton.wasReleasedThisFrame)) | ||
{ | ||
// The pointer was not removed | ||
// Pointers can have be reset before (e.g. when calling OnDisable) which would make m_PointerStates |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Grammar: "have be reset" should be "have been reset".
// Pointers can have be reset before (e.g. when calling OnDisable) which would make m_PointerStates | |
// Pointers can have been reset before (e.g. when calling OnDisable) which would make m_PointerStates |
Copilot uses AI. Check for mistakes.
Description
This fixes ISXB-1546 by reverting the changes from #1982, which introduced a regression while addressing ISXB-687. Additionally, new tests have been added to prevent future regressions in this area.
The fix for ISXB-687 now checks whether the pointer state list contains the pointer before attempting removal.
Previously, users could set up a button listener event that could call
InputSystemUIInputModule.OnDisable()
, which would reset the pointer state duringInputSystemUIInputModule.Process()
. This would lead to attempts to remove pointer states that were removed during the reset.Testing status & QA
Tested ISXB-1546 with a Samsung tablet with an active Pen. It would be ideal if @Pauliusd01 or some CQA could test this on device to make sure I didn't miss something.
Tested ISXB-687 reproduction steps which now don't raise an error.
Additionally, If you copy
UITest.cs
changes from this PR intodevelop
, the tests should fail.Overall Product Risks
Please rate the potential complexity and halo effect from low to high for the reviewers. Note down potential risks to specific Editor branches if any.
Comments to reviewers
Make sure to replicate steps from the Jira tickets and make sure they now work as expected.
Checklist
Before review:
Changed
,Fixed
,Added
sections.Area_CanDoX
,Area_CanDoX_EvenIfYIsTheCase
,Area_WhenIDoX_AndYHappens_ThisIsTheResult
.Docs for new/changed API's.During merge:
NEW: ___
.FIX: ___
.DOCS: ___
.CHANGE: ___
.RELEASE: 1.1.0-preview.3
.After merge: