Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Unified Diff: ui/events/gestures/gesture_sequence.cc

Issue 133273013: Consuming any touch move before SCROLL_START prevents the scroll from occuring in Aura (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address sadrul's comments. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/gestures/gesture_sequence.h ('k') | ui/events/gestures/gestures.dot » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/gestures/gesture_sequence.cc
diff --git a/ui/events/gestures/gesture_sequence.cc b/ui/events/gestures/gesture_sequence.cc
index 7b37f4561b0f901de0fe684c5d6ec5add5abae2a..f9f02f4912c0a6dcf337e93bfd7c4eadf260485c 100644
--- a/ui/events/gestures/gesture_sequence.cc
+++ b/ui/events/gestures/gesture_sequence.cc
@@ -129,6 +129,12 @@ enum EdgeStateSignatureType {
GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED =
G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 1, TS_PRESSED, TSI_NOT_PROCESSED),
+ GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED =
+ G(GS_SYNTHETIC_CLICK_ABORTED, 0, TS_RELEASED, TSI_ALWAYS),
+
+ GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED =
+ G(GS_SYNTHETIC_CLICK_ABORTED, 1, TS_PRESSED, TSI_NOT_PROCESSED),
+
GST_SCROLL_FIRST_RELEASED =
G(GS_SCROLL, 0, TS_RELEASED, TSI_ALWAYS),
@@ -342,6 +348,8 @@ EdgeStateSignatureType Signature(GestureState gesture_state,
case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY:
case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED:
case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED:
+ case GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED:
+ case GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED:
case GST_SCROLL_FIRST_RELEASED:
case GST_SCROLL_FIRST_MOVED:
case GST_SCROLL_FIRST_CANCELLED:
@@ -474,6 +482,16 @@ void UpdateGestureEventLatencyInfo(const TouchEvent& event,
}
}
+bool GestureStateSupportsActiveTimer(GestureState state) {
+ switch(state) {
+ case GS_PENDING_SYNTHETIC_CLICK:
+ case GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL:
+ return true;
+ default:
+ return false;
+ }
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -557,6 +575,7 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture(
set_state(GS_PENDING_SYNTHETIC_CLICK);
break;
case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED:
+ case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED:
if (Click(event, point, gestures.get()))
point.UpdateForTap();
else
@@ -572,24 +591,24 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture(
point.UpdateForScroll();
}
break;
+ case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED:
case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED:
case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY:
- // No scrolling allowed, so nothing happens.
- break;
- case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED:
if (point.IsInScrollWindow(event)) {
PrependTapCancelGestureEvent(point, gestures.get());
+ set_state(GS_SYNTHETIC_CLICK_ABORTED);
+ } else {
set_state(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL);
}
break;
case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED:
case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED:
+ case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED:
+ case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED:
PrependTapCancelGestureEvent(point, gestures.get());
set_state(GS_NO_GESTURE);
break;
- case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED:
- case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED:
- case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED:
+ case GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED:
set_state(GS_NO_GESTURE);
break;
case GST_SCROLL_FIRST_MOVED:
@@ -605,10 +624,11 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture(
set_state(GS_NO_GESTURE);
break;
case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED:
+ case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED:
PrependTapCancelGestureEvent(point, gestures.get());
TwoFingerTapOrPinch(event, point, gestures.get());
break;
- case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED:
+ case GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED:
TwoFingerTapOrPinch(event, point, gestures.get());
break;
case GST_SCROLL_SECOND_PRESSED:
@@ -751,7 +771,10 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture(
<< " State: " << state_
<< " touch id: " << event.touch_id();
- if (last_state == GS_PENDING_SYNTHETIC_CLICK && state_ != last_state) {
+ // If the state has changed from one in which a long/show press is possible to
+ // one in which they are not possible, cancel the timers.
+ if (GestureStateSupportsActiveTimer(last_state) &&
+ !GestureStateSupportsActiveTimer(state_)) {
GetLongPressTimer()->Stop();
GetShowPressTimer()->Stop();
}
@@ -1102,7 +1125,8 @@ void GestureSequence::AppendTwoFingerTapGestureEvent(Gestures* gestures) {
bool GestureSequence::Click(const TouchEvent& event,
const GesturePoint& point,
Gestures* gestures) {
- DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK);
+ DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK ||
+ state_ == GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL);
if (point.IsInClickWindow(event)) {
int tap_count = 1;
if (point.IsInTripleClickWindow(event))
@@ -1187,6 +1211,7 @@ bool GestureSequence::TwoFingerTouchDown(const TouchEvent& event,
Gestures* gestures) {
DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK ||
state_ == GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL ||
+ state_ == GS_SYNTHETIC_CLICK_ABORTED ||
state_ == GS_SCROLL);
if (state_ == GS_SCROLL) {
« no previous file with comments | « ui/events/gestures/gesture_sequence.h ('k') | ui/events/gestures/gestures.dot » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698