fix(touch): allow pointerDown veto to stop tracking and free scroll - #17467
Open
ChronosSF wants to merge 1 commit into
Open
fix(touch): allow pointerDown veto to stop tracking and free scroll#17467ChronosSF wants to merge 1 commit into
ChronosSF wants to merge 1 commit into
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adjusts the shared IgxTouchManager gesture tracking so consumers can veto a pointerdown and immediately stop tracking, preventing the manager’s non-passive touchmove listener from suppressing normal page scrolling (notably when gestures are attached on document, such as in Navigation Drawer).
Changes:
- Expanded
IgxTouchManagerCallbacks.pointerDownto allow returningfalseand added_stopTracking()to immediately reset tracking state and best-effort release pointer capture. - Updated Navigation Drawer’s
panStart(used aspointerDown) to returntrue/falsebased on whether the gesture should be handled (edge-zone / open drawer) or ignored (allowing scroll). - Includes
package-lock.jsonchanges that appear unrelated to the touch fix.
Reviewed changes
Copilot reviewed 2 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| projects/igniteui-angular/core/src/core/touch.ts | Adds a veto-able pointerDown callback contract and immediate tracking teardown to avoid blocking scroll for ignored gestures. |
| projects/igniteui-angular/navigation-drawer/src/navigation-drawer/navigation-drawer.component.ts | Makes panStart return a boolean to accept/veto gestures, enabling scroll-friendly behavior when touches start outside the edge zone. |
| package-lock.json | Contains lockfile diffs unrelated to the stated change; likely accidental/high-churn. |
Comment on lines
+220
to
+225
| // Let the consumer veto the gesture (e.g. the touch did not start in an active | ||
| // zone). Returning `false` stops tracking immediately so the `touchmove` listener | ||
| // does not block normal scrolling and other gestures are not interfered with. | ||
| if (this.callbacks.pointerDown?.(this._createEvent(event)) === false) { | ||
| this._stopTracking(event.pointerId); | ||
| } |
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.
IgxTouchManagerstarts tracking on every acceptedpointerdownand, via its non-passivetouchmovelistener, callspreventDefault()while tracking. When attached todocument(e.g. Navigation Drawer), this cancels normal page scrolling even when the consumer would ignore the gesture. Addresses the review comments in pullrequestreview-4787557464.Changes
core/src/core/touch.tspointerDowncallback signature is now(event: IgxGestureEvent) => boolean | void.pointerDownreturnsfalse, the manager stops tracking immediately via a new_stopTracking()helper — resets_tracking/_panStarted/_pointerId/_startTargetand best-effort releases pointer capture — sotouchmoveno longer suppresses scrolling for vetoed gestures.navigation-drawer/.../navigation-drawer.component.tspanStart(wired as the drawer'spointerDown) now returnsboolean:truewhen a pan is accepted (drawer open, or touch starts withinmaxEdgeZone),falseotherwise (gestures disabled, pinned, non-touch, or touch outside the edge zone), letting the manager bail out and leave scrolling intact.Returning nothing preserves the previous behavior, so other consumers are unaffected.