Index: third_party/WebKit/Source/core/input/PointerEventManager.cpp |
diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
index a60584834e48387f1cef9bb2fd284db9f7e4b550..3af580a6af584bb67ada6592c60e183381611721 100644 |
--- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
+++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
@@ -29,6 +29,22 @@ size_t ToPointerTypeIndex(WebPointerProperties::PointerType t) { |
return static_cast<size_t>(t); |
} |
+Vector<WebPointerEvent> GetCoalescedWebPointerEventsWithNoTransformation( |
+ const Vector<WebTouchEvent>& coalesced_events, |
+ int id) { |
+ Vector<WebPointerEvent> related_pointer_events; |
+ for (const auto& touch_event : coalesced_events) { |
+ for (unsigned i = 0; i < touch_event.touches_length; ++i) { |
+ if (touch_event.touches[i].id == id && |
+ touch_event.touches[i].state != WebTouchPoint::kStateStationary) { |
+ related_pointer_events.push_back( |
+ WebPointerEvent(touch_event, touch_event.touches[i])); |
+ } |
+ } |
+ } |
+ return related_pointer_events; |
+} |
+ |
Vector<std::pair<WebTouchPoint, TimeTicks>> GetCoalescedPoints( |
const Vector<WebTouchEvent>& coalesced_events, |
int id) { |
@@ -318,7 +334,6 @@ WebInputEventResult PointerEventManager::HandleTouchEvents( |
} |
UserGestureIndicator holder(possible_gesture_token); |
- HeapVector<EventHandlingUtil::PointerEventTarget> pointer_event_targets; |
for (unsigned touch_point_idx = 0; touch_point_idx < event.touches_length; |
++touch_point_idx) { |
@@ -328,17 +343,23 @@ WebInputEventResult PointerEventManager::HandleTouchEvents( |
EventHandlingUtil::PointerEventTarget pointer_event_target = |
touch_point_idx ? ComputePointerEventTarget(touch_point) |
: first_pointer_event_target; |
- pointer_event_targets.push_back(pointer_event_target); |
- DispatchTouchPointerEvent( |
- touch_point, pointer_event_target, |
- GetCoalescedPoints(coalesced_events, touch_point.id), |
- static_cast<WebInputEvent::Modifiers>(event.GetModifiers()), |
- event.TimeStampSeconds(), event.unique_touch_event_id); |
+ if (touch_point.state != blink::WebTouchPoint::kStateStationary) { |
+ DispatchTouchPointerEvent( |
+ touch_point, pointer_event_target, |
+ GetCoalescedPoints(coalesced_events, touch_point.id), |
+ static_cast<WebInputEvent::Modifiers>(event.GetModifiers()), |
+ event.TimeStampSeconds(), event.unique_touch_event_id); |
+ |
+ touch_event_manager_->HandleTouchPoint( |
+ WebPointerEvent(event, event.touches[touch_point_idx]), |
+ GetCoalescedWebPointerEventsWithNoTransformation( |
+ coalesced_events, event.touches[touch_point_idx].id), |
+ pointer_event_target); |
+ } |
} |
- return touch_event_manager_->HandleTouchEvent(event, coalesced_events, |
- pointer_event_targets); |
+ return touch_event_manager_->HandleVSyncSignal(); |
} |
EventHandlingUtil::PointerEventTarget |
@@ -404,7 +425,6 @@ void PointerEventManager::DispatchTouchPointerEvent( |
// required. |
// Do not send pointer events for stationary touches or null targetFrame |
if (pointer_event_target.target_node && pointer_event_target.target_frame && |
- touch_point.state != WebTouchPoint::kStateStationary && |
!in_canceled_state_for_pointer_type_touch_) { |
PointerEvent* pointer_event = pointer_event_factory_.Create( |
touch_point, coalesced_events, |