1. 06 Jul, 2023 1 commit
    • Ian Hickson's avatar
      Allow long-press gestures to continue even if buttons change. (#127877) · bc49cd1b
      Ian Hickson authored
      Previously, if you changed buttons during a long-press gesture, if it was before the gesture was accepted we would discard it, and if it was after the gesture was accepted we would silently end it without firing any of the relevant events.
      
      This silent cancelation behavior is terrible because it means there's no way for consumers to know what state they're in, so you end up with widgets that thing they're still being long-pressed even though nothing is happening.
      
      We could change the behavior in three ways, as far as I can tell:
      
      - we could send a cancel event when you change buttons. This would introduce a new kind of transition (start->cancel) which I don't think we currently require people to support. This would therefore not fix existing code and would make future code more complicated to handle a really obscure user action that it seems unlikely anyone cares about.
      
      - we could send an end event when you change buttons. This would mean the action commits, even though the user is still holding the mouse button down. This seems slightly better than the previous option but still not ideal as it means nudging the mouse button commits you even though you're still holding the button down.
      
      - we could ignore button changes after the long-press has been accepted.
      
      I implemented the last one in this PR.
      Unverified
      bc49cd1b
  2. 14 Jun, 2023 1 commit
    • LouiseHsu's avatar
      Remove temporary default case for PointerSignalKind (#128900) · 4effd9c4
      LouiseHsu authored
      This PR cleans up some prep that was added as part of
      https://github.com/flutter/flutter/pull/120731 which was done to unblock
      https://github.com/flutter/engine/pull/39637
      Since the work done in that PR was reverted, this should be removed.
      
      ## Pre-launch Checklist
      
      - [x] I read the [Contributor Guide] and followed the process outlined
      there for submitting PRs.
      - [x] I read the [Tree Hygiene] wiki page, which explains my
      responsibilities.
      - [x] I read and followed the [Flutter Style Guide], including [Features
      we expect every widget to implement].
      - [x] I signed the [CLA].
      - [x] I listed at least one issue that this PR fixes in the description
      above.
      - [x] I updated/added relevant documentation (doc comments with `///`).
      - [ ] I added new tests to check the change I am making, or this PR is
      [test-exempt].
      - [x] All existing and new tests are passing.
      Unverified
      4effd9c4
  3. 09 Jun, 2023 1 commit
    • Tong Mu's avatar
      Remove single view assumption from MouseTracker, and unify its hit testing code flow (#127060) · ab3c5bfc
      Tong Mu authored
      This is a refactor to make `MouseTracker` use the same callback for both kinds of device update. Instead of using two different callbacks for the two device updating methods, `MouseTracker` now receives a hit testing callback at construction, which is the same hit testing method as the one used for other gestures.
      
      This PR not only makes the code cleaner, but also removes the single view assumption from `MouseTracker`, whose code no longer refers to `RendererBinding.renderView`. In the future, we only need to modify `hitTest` (which we will have to do to support gestures for multi-view anyway) to make mouse tracker support multi-view.
      Unverified
      ab3c5bfc
  4. 08 Jun, 2023 1 commit
  5. 07 Jun, 2023 1 commit
  6. 31 May, 2023 2 commits
    • Renzo Olivares's avatar
      Fix bottom sheet rebuilding when tapping (#127526) · 83f19be2
      Renzo Olivares authored
      This fixes an issue where the bottom sheet would rebuild when `enableDrag` is set to true on every tap. This is because `DragGestureRecognizer` would win the arena by default and dispatch the `drag` callbacks (in `acceptGesture`) even though it had not met the drag threshold. This changes keep the default behavior of `DragGestureRecognizer` the same, but adds a parameter `onlyAcceptDragOnThreshold` that a user can use to stop drag callbacks from being fired when the drag threshold has not been met.
      
      Fixes #126833
      Unverified
      83f19be2
    • Ian Hickson's avatar
  7. 16 May, 2023 1 commit
  8. 15 May, 2023 1 commit
  9. 11 May, 2023 1 commit
  10. 23 Mar, 2023 1 commit
  11. 22 Mar, 2023 1 commit
  12. 20 Mar, 2023 1 commit
  13. 17 Mar, 2023 1 commit
  14. 15 Mar, 2023 1 commit
  15. 08 Mar, 2023 1 commit
  16. 02 Mar, 2023 1 commit
  17. 28 Feb, 2023 1 commit
  18. 17 Feb, 2023 1 commit
  19. 15 Feb, 2023 1 commit
  20. 13 Feb, 2023 1 commit
  21. 03 Feb, 2023 1 commit
  22. 01 Feb, 2023 1 commit
  23. 31 Jan, 2023 1 commit
  24. 30 Jan, 2023 1 commit
  25. 27 Jan, 2023 1 commit
  26. 25 Jan, 2023 2 commits
  27. 23 Jan, 2023 1 commit
  28. 13 Jan, 2023 1 commit
    • Bernardo Ferrari's avatar
      Add `allowedButtonsFilter` to prevent Draggable from appearing with secondary click. (#111852) · 0752af84
      Bernardo Ferrari authored
      * DragTarget part 1.
      
      [WIP] Change GestureRecognizer. Sorry.
      
      [WIP] Move from GestureRecognizer to MultiDragGestureRecognizer.
      
      Make it a `Set<int>?`
      
      Get bitwise operations working.
      
      Fix test. Rename to allowedInputPointers.
      
      Convert into a builder.
      
      Improve code with default funciton.
      
      Refactor everything again.
      
      Rename to buttonEventFilter.
      
      Use static function.
      
      Fix analyzer.
      
      Fix private reference.
      
      Use // in private method.
      
      * Fix Renzo request.
      
      * Add `allowedButtonsFilter` everywhere.
      
      * Refactor monoDrag for multi pointer support.
      
      * Fix tests?
      
      * Change default to always true.
      
      * Fix PR comments.
      
      * Completely refactor long press.
      
      * Add forgotten class.
      
      * Revert "Completely refactor long press."
      
      This reverts commit 5038e8603e250e8c928b0f1754fb794b7b75738b.
      
      * Add default value to LongPress
      
      * Refactor doubleTap.
      
      * Relax double tap.
      
      * Write comment in LongPress.
      
      * Use template.
      Unverified
      0752af84
  29. 06 Jan, 2023 1 commit
  30. 04 Jan, 2023 1 commit
  31. 21 Dec, 2022 2 commits
    • Renzo Olivares's avatar
    • Renzo Olivares's avatar
      Add support for double tap and drag for text selection (#109573) · cd0f15a7
      Renzo Olivares authored
      * Replace PanGestureRecognizer in TextSelection with TapAndDragGestureRecognizer
      
      * add tracking of _DragState to new tap_and_drag recognizer and remove some legacy double tap code from text_selection.dart and add logs"
      
      * add dragTapCount, a tap count that is persistent for an entire drag and is set to null on drag end vs the regular tap count which is reset on a timer
      
      * basic double tap to drag functionality and add a local dragTapCount in text_selection.dart to use with the timer callback
      
      * Add offsetFromOrigin and localOffsetFromOrigin to DragUpdateDetails similar to LongPressMoveUpdateDetails, eliminates the need to hold the state of lastDragStartDetails
      
      * make a generic baselongpressgesturerecognizer
      
      * Revert "make a generic baselongpressgesturerecognizer"
      
      This reverts commit aad8f7433bd01e4cd016d527af832c3b1f15fac5.
      
      * rename tap_and_drag to selection_recognizers
      
      * add mixin for consecutivetap
      
      * tap and long press gesture recognizer
      
      * Revert "Revert "make a generic baselongpressgesturerecognizer""
      
      This reverts commit 181350c36718f644eada3e45c1b7b5939f90a340.
      
      * Revert "Revert "Revert "make a generic baselongpressgesturerecognizer"""
      
      This reverts commit 4d69775967858dfd66dd9429e1713da598908a85.
      
      * Add support for secondary button clicks on drag gesture recognizer and separate drag end and tap up callback
      
      * get test running
      
      * rename tapCount to consecutiveTapCount
      
      * dispose timer properly
      
      * add some comments to tests
      
      * Add comments
      
      * Make ConsecutiveTapMixin private and move logic to increment tap count into mixin
      
      * stop tracking pointer when gesture is rejected and detect drags on touch devices
      
      * onCancel for TapAndDrag
      
      * have the TapAndDragGestureRecognizer handle tap downs and tap ups on touch and mouse devices
      
      * add drag to move cursor for android and iOS, and pointer device kind to DragUpdateDetails
      
      * get tests running
      
      * refactor TapAndDragGestureRecognizer moving some logic into _check methods
      
      * Handle cancel properly on TapAndDragGestureRecognizer, having both onTapCancel and onDragCancel, also fix tests
      
      * Fix test mouse drag selects and cannot drag cursor, save _initialPosition based on dragStartBehavior (either on tapDown or dragStart)
      
      * determine if drag has a sufficient global distance to accept and fix some cancel behavior, making _checkCancel clearer
      
      * give up pointer on drag end
      
      * properly stop tracking pointer, fixes test for right click on Apple and non-apple platforms
      
      * clean up some comments from last commit
      
      * remove drag on touch for now
      
      * fix Can select text by dragging with a mouse due to dragStart only being fired on the first PointerMoveEvent, the previous pan gesture recognizer would fire both dragStart and dragUpdate
      
      * Revert "fix Can select text by dragging with a mouse due to dragStart only being fired on the first PointerMoveEvent, the previous pan gesture recognizer would fire both dragStart and dragUpdate"
      
      This reverts commit 124dc79bc3389672c76d7c014ce04edab297abc6.
      
      * correctly use _initialPosition for checkStart and call _checkUpdate after _checkStart if localDelta is not zero
      
      * updates
      
      * fix double tap chains
      
      * Add docs
      
      * Address analyzer
      
      * more analyzer, only issues left are with print statements
      
      * add deadlineTimer to fix conflict with ForcePressGestureRecognizer
      
      * Revert "add deadlineTimer to fix conflict with ForcePressGestureRecognizer"
      
      This reverts commit 3b29ddfff4cde4845edd481ecefb789fea2a0781.
      
      * remove unecessary changes to tests
      
      * secondaryButton should not drag
      
      * Revert "Revert "add deadlineTimer to fix conflict with ForcePressGestureRecognizer""
      
      This reverts commit 0a008f029f5796acd48c17c1897c0b700d5ef3a7.
      
      * updates
      
      * Revert "updates"
      
      This reverts commit 4803b8443a2b67f0b8d29e9a01f712dfcb0f588c.
      
      * Revert "Revert "Revert "add deadlineTimer to fix conflict with ForcePressGestureRecognizer"""
      
      This reverts commit 79251a7af88d5dbb1460a960afc77e65dea18bff.
      
      * fix shift + tap + drag tests, this was happening because a double tap + drag was being registered and not a single tap, added a duration to pumpAndSettle to fix this
      
      * remove TapAndLongPressGestureRecognizer
      
      * fix cupertino text field tests related to shift + tap + drag
      
      * deadline timer try 2
      
      * more logs
      
      * Should reset taps when tap cancel is called, and should wait until gesture is accepted to initiate a drag
      
      * should clear _down and _up when gesture is rejected
      
      * remove erroneous log
      
      * fix selectable text double tap chains test
      
      * dont restart timer until tap up
      
      * reset consecutiveTapCount on drag end
      
      * fix selectableText test
      
      * fix material text field tests
      
      * reject TapAndDragGestureRecognizer when it is neither a tap nor a drag
      
      * remove prints
      
      * clean up
      
      * shift aware
      
      * clean up
      
      * fix cupertino test
      
      * fix text field focus tests
      
      * Add 100ms delay to cupertino test, to prevent a double tap
      
      * clean up test comments
      
      * add comment to test
      
      * uncomment test
      
      * remove longpress changes
      
      * Fix drag on mobile
      
      * remove debug
      
      * Fix drag to move cursor on iOS
      
      * left over from drag fix
      
      * add tests for drag on touch devices
      
      * add test for double tap + drag mouse devices
      
      * add tests
      
      * Fix bug where initialPosition was used before it was set
      
      * Address some review comments and fix issue where if double tap was held too long then long press gesture recognizer would take over
      
      * remove _isDoubleTap flag since it is no longer needed due to previous commit
      
      * Add docs for onTapCancel and onDragCancel
      
      * analyzer fixes
      
      * Do not test selection handles on macOS, since macOS does not support touch
      
      * Add assert for dragStartBehavior
      
      * add double tap + drag tests to cupertino
      
      * use kDoubleTapTimeout instead of const Duration(milliseconds: 300) for readability
      
      * analyzer issues
      
      * update docs
      
      * update more docs
      
      * address comments
      
      * more doc updates
      
      * fix docs
      
      * unused import
      
      * fix docs
      
      * Add more tests
      
      * Add more tests and reject a tap up if we have exceeded the tap tolerance
      
      * updates
      
      * Address comments
      
      * fix test naming
      
      * update documentation
      
      * move selection_recognizers to selection_gestures
      
      * fix analyzer
      
      * fix analyzer
      
      * keysPressedOnDown instead of isShiftPressed
      
      * update docs
      
      * update docs
      
      * Add drag update throttle to TapAndDragGestureRecognizer
      
      * update comments
      
      * missed from merge
      
      * Replace _ConsecutiveTapMixin with _TapStatusTrackerMixin
      
      * updates
      
      * correctly cancel tap when when past tap tolerance with new implementation
      
      * Should call tap and drag cancel if we are giving up a pointer without succesfully tracking a PointerUpEvent
      
      * comments
      
      * move pastTapTolerance to tap tracker
      
      * move pastTapTolerance to tap tracker
      
      * clean up check for nulls and remove use of consecutiveTapCountWhileDragging
      
      * move call to super.acceptGesture to top
      
      * remove print
      
      * clean up
      
      * Fix tests where both PanGestureRecognizer and TapAndDragGestureRecognizer lost
      
      * clean up
      
      * _GestureState -> _DragState
      
      * more docs clean up
      
      * more clean up
      
      * Add onSecondaryTapCancel
      
      * Add docs
      
      * more docs
      
      * Fix broken isPointerAllowed when attempting a right click drag - the _initialButtons is never reset
      
      * revert debug flag
      
      * make primaryPointer private
      
      * Add support for upper count limit in TapAndDragGestureRecognizer, the tap counter should not be allowed to grow infinitely unless that is desired
      
      * fix analyzer
      
      * Use new TapDrag details objects and callbacks
      
      * clean up docs
      
      * clean up and add test for upperLimit
      
      * Add docs for TapAndDragGestureRecognizer and remove some ambiguity of onStart onUpdate and onEnd parameters
      
      * Address review comments
      
      * analyzer fixes
      
      * Call cancel before rejecting the gesture so we can still access _initialButtons
      
      * Recognizer should reject any pointer differing from the original
      
      * Revert "Recognizer should reject any pointer differing from the original"
      
      This reverts commit afd9807480bd11e119bdd2b7d520631511973bab.
      
      * Address reviewer comments
      
      * Correct cancel behavior
      
      * Fix consecutive tap + drag because _dragStart state was not being set when consecutive tap is greater than one
      
      * Add more tests
      
      * Add documentation on behavior with TapGestureRecognizer and DragGestureRecognizer
      
      * more docs
      
      * more docs
      
      * remove comments
      
      * updates
      
      * fix multiple pointer behavior
      
      * only handle the primary pointer
      
      * Clean up dangerous assumptions in gesture details objects
      
      * forgot from rebase
      
      * update docs
      
      * updates
      
      * Clean up some redundant code
      
      * remove whitespace
      
      * fix tests as a result of #115849
      
      * update test docs
      
      * Fix same test from last commit for material variants
      
      * More clean up of redundant code and update docs
      
      * Clean up didStopTrackingLastPointer and untie TapAndDragGestureRecognizer cancel behavior from TapStatusTrackerMixin.currentUp state
      
      * untie pastTapTolerance
      
      * updates
      
      * Add slopTolerance
      
      * update docs
      
      * Have secondary tap handled by TapGestureRecognizer
      
      * update docs
      
      * fix analyzer and address comments
      
      * Add more docs
      
      * Update cancel behavior tol not call on tap cancel when a drag has been accepted
      
      * Change cancel behavior to only cancel if the tap down callback has been sent and merge tapcancel and dragcancel
      
      * update docs;
      
      * Rename selection_gestures to tap_and_drag_gestures
      
      * Address some reviewer comments
      
      * make deadline and slopTolerance private
      
      * updates
      
      * updates
      
      * Address review comments
      
      * remove _initialButtons
      
      * fix docs
      
      * trackTrap -> trackTap
      
      * fix analyzer
      
      * Add test to verify that tap up is called when recognizer accepts before handleEvent is called
      
      * implement Diagnosticable for Details objects;
      
      * sentTapDown == wonArenaForPrimaryPointer, so the implementation now only uses sentTapDown
      
      * Count user tap up immediately and do not wait to win the arena
      
      * Do not need to call super from TapAndDragGestureRecognizer.acceptGesture anymore because mixin implementation is gone
      
      * Do not start selection drag on Android, iOS, and Fuchshsia touch devices if renderEditable does not have focus, this fixes many scubas
      
      * Address reviewer comments
      
      * fix test
      
      * TapAndDragGestureRecognizer should wait for other recognizer to lose before winning the arena
      
      * Address review comments
      
      * Dont check for drag if the start was already found
      
      * Only check for a drag if it has not already been found"
      
      * fix from rebase
      Co-authored-by: 's avatarRenzo Olivares <roliv@google.com>
      Unverified
      cd0f15a7
  32. 20 Dec, 2022 1 commit
  33. 15 Dec, 2022 1 commit
  34. 12 Dec, 2022 1 commit
  35. 11 Dec, 2022 1 commit
  36. 05 Oct, 2022 1 commit
  37. 22 Sep, 2022 1 commit