[Web] Remove explicit reset from onPointerCancel#4133
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes a web-specific orchestration edge case where Touchable (and similar handlers) could remain in the GestureHandlerOrchestrator after being cancelled, causing unrelated buttons to become unresponsive.
Changes:
- Removes the explicit
reset()call fromGestureHandler.onPointerCancelso handlers remain inCANCELLEDuntil the orchestrator’s scheduled cleanup resets/removes them.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
0265d8e to
dba0388
Compare
m-bert
approved these changes
Apr 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
#4128 changed how handlers kept in the orchestrator are treated - those can now influence other handlers' state. When trying to use the
Touchablecomponent in the example app, I've noticed that other buttons become unresponsive after scrolling cancels the pressed button.This turned out to be caused by an explicit
resetcall insideonPointerCancel. This caused the handler's state to go toUNDETERMINEDbetween the change toCANCELEDand the time the orchestrator runscleanupFinishedHandlers. When the orchestrator goes over the handlers to clean, it ignores handlers that are not in a finished state. Since the gesture changed toUNDETERMINED, it was kept in the orchestrator after being canceled.Note that the handler is still being reset by the orchestrator in a scheduled microtask.
Test plan
I replaced
RectButtonson in the example app list withTouchablesScreen.Recording.2026-04-29.at.13.02.06.mov
Screen.Recording.2026-04-29.at.13.01.27.mov