TouchBackend: Clear old timeout in handleTopMoveStartDelay#3664
Open
raineorshine wants to merge 2 commits intoreact-dnd:mainfrom
Open
TouchBackend: Clear old timeout in handleTopMoveStartDelay#3664raineorshine wants to merge 2 commits intoreact-dnd:mainfrom
raineorshine wants to merge 2 commits intoreact-dnd:mainfrom
Conversation
Contributor
Author
|
@darthtrevino Ready for review! Thanks. |
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.
Problem
Normally,
delayTouchStartrequires that the user tap and hold the draggable element for a given delay before a drag is initiated. If there is a touchmove during this time, the drag is cancelled.However, if the user quickly touches the screen and then initiates a tap + move within
delayTouchStart, the drag will incorrectly start, ignoring the move that would have cancelled it.A real-world case is described in cybersemics/em#2967.
Cause
This occurs because the
handleTopMoveStarttimer is only cleared inhandleTopMove. WhenhandleTouchStartDelayis triggered in quick session (by two taps), then the second call tohandleTouchStartDelaywill overwrite the existing timer beforehandleTopMovehas the chance to clear it. Thus, whenhandleTopMovefires, it only clears the second timer, and the first incorrectly resolveshandleTouchStartthinking that the user has not moved their finger.Solution
This is fixed by clearing the old timer before setting the new timer.