Chromium Code Reviews| 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 301e853c96863ced66d6d649ca5744ccbc80000b..1e095c27e419bd8b3a89f214159c8968677e260b 100644 |
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| @@ -33,6 +33,22 @@ bool HasPointerEventListener(const EventHandlerRegistry& registry) { |
| return registry.HasEventHandlers(EventHandlerRegistry::kPointerEvent); |
| } |
| +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) { |
| @@ -324,7 +340,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) { |
| @@ -334,17 +349,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_->FlushEvents(); |
|
mustaq
2017/06/13 15:15:24
Please add a TODO re main_thread_event_queue calls
Navid Zolghadr
2017/06/13 19:31:17
Done.
|
| } |
| EventHandlingUtil::PointerEventTarget |
| @@ -410,7 +431,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, |