| Index: ui/events/gesture_detection/filtered_gesture_provider.cc
|
| diff --git a/ui/events/gesture_detection/filtered_gesture_provider.cc b/ui/events/gesture_detection/filtered_gesture_provider.cc
|
| index 239b66da131cfd0fba8dc9176d3c95245d9c58f5..78d1df481b2d16dba43851b3b9a47646f3172eb4 100644
|
| --- a/ui/events/gesture_detection/filtered_gesture_provider.cc
|
| +++ b/ui/events/gesture_detection/filtered_gesture_provider.cc
|
| @@ -10,31 +10,41 @@
|
|
|
| namespace ui {
|
|
|
| +FilteredGestureProvider::TouchHandlingResult::TouchHandlingResult()
|
| + : succeeded(false), did_generate_scroll(false) {
|
| +}
|
| +
|
| FilteredGestureProvider::FilteredGestureProvider(
|
| const GestureProvider::Config& config,
|
| GestureProviderClient* client)
|
| : client_(client),
|
| gesture_provider_(config, this),
|
| gesture_filter_(this),
|
| - handling_event_(false) {}
|
| + handling_event_(false),
|
| + last_touch_event_did_generate_scroll_(false) {
|
| +}
|
|
|
| -bool FilteredGestureProvider::OnTouchEvent(const MotionEvent& event) {
|
| +FilteredGestureProvider::TouchHandlingResult
|
| +FilteredGestureProvider::OnTouchEvent(const MotionEvent& event) {
|
| DCHECK(!handling_event_);
|
| base::AutoReset<bool> handling_event(&handling_event_, true);
|
|
|
| pending_gesture_packet_ = GestureEventDataPacket::FromTouch(event);
|
| -
|
| + last_touch_event_did_generate_scroll_ = false;
|
| if (!gesture_provider_.OnTouchEvent(event))
|
| - return false;
|
| + return TouchHandlingResult();
|
|
|
| - TouchDispositionGestureFilter::PacketResult result =
|
| + TouchDispositionGestureFilter::PacketResult filter_result =
|
| gesture_filter_.OnGesturePacket(pending_gesture_packet_);
|
| - if (result != TouchDispositionGestureFilter::SUCCESS) {
|
| + if (filter_result != TouchDispositionGestureFilter::SUCCESS) {
|
| NOTREACHED() << "Invalid touch gesture sequence detected.";
|
| - return false;
|
| + return TouchHandlingResult();
|
| }
|
|
|
| - return true;
|
| + TouchHandlingResult result;
|
| + result.succeeded = true;
|
| + result.did_generate_scroll = last_touch_event_did_generate_scroll_;
|
| + return result;
|
| }
|
|
|
| void FilteredGestureProvider::OnTouchEventAck(bool event_consumed) {
|
| @@ -65,6 +75,11 @@ const ui::MotionEvent* FilteredGestureProvider::GetCurrentDownEvent() const {
|
|
|
| void FilteredGestureProvider::OnGestureEvent(const GestureEventData& event) {
|
| if (handling_event_) {
|
| + if (event.details.type() == ui::ET_GESTURE_SCROLL_BEGIN ||
|
| + event.details.type() == ui::ET_GESTURE_SCROLL_UPDATE ||
|
| + event.details.type() == ui::ET_SCROLL_FLING_START) {
|
| + last_touch_event_did_generate_scroll_ = true;
|
| + }
|
| pending_gesture_packet_.Push(event);
|
| return;
|
| }
|
|
|