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 5a18188771175f635344fb342c9b6c0b0ac91bbf..1eddbf6de632d44f8bf915fdf368a721313c9251 100644 |
| --- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| +++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp |
| @@ -12,6 +12,8 @@ namespace blink { |
| namespace { |
| +inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>(t); } |
|
dtapuska
2016/04/05 19:21:25
I prefer size_t to integer values; and I'd rename
Navid Zolghadr
2016/04/05 20:17:25
Sure. It looks better that way.
|
| + |
| const AtomicString& pointerEventNameForTouchPointState(PlatformTouchPoint::TouchState state) |
| { |
| switch (state) { |
| @@ -120,8 +122,10 @@ void PointerEventManager::sendMouseAndPossiblyPointerNodeTransitionEvents( |
| // stage. So if the event is not frame boundary transition it is only a |
| // compatibility mouse event and we do not need to change pointer event |
| // behavior regarding preventMouseEvent state in that case. |
| - if (isFrameBoundaryTransition && pointerEvent->buttons() == 0) { |
| - m_preventMouseEventForPointerTypeMouse = false; |
| + if (isFrameBoundaryTransition && pointerEvent->buttons() == 0 |
| + && pointerEvent->isPrimary()) { |
| + m_preventMouseEventForPointerType[toInt( |
| + mouseEvent.pointerProperties().pointerType)] = false; |
| } |
| processCaptureAndPositionOfPointerEvent(pointerEvent, enteredNode, |
| @@ -356,8 +360,10 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent( |
| // This is for when the mouse is released outside of the page. |
| if (pointerEvent->type() == EventTypeNames::pointermove |
| - && !pointerEvent->buttons()) { |
| - m_preventMouseEventForPointerTypeMouse = false; |
| + && !pointerEvent->buttons() |
| + && pointerEvent->isPrimary()) { |
| + m_preventMouseEventForPointerType[toInt( |
| + mouseEvent.pointerProperties().pointerType)] = false; |
| } |
| processCaptureAndPositionOfPointerEvent(pointerEvent, target, |
| @@ -370,10 +376,14 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent( |
| dispatchPointerEvent(effectiveTarget, pointerEvent); |
| if (result != WebInputEventResult::NotHandled |
| - && pointerEvent->type() == EventTypeNames::pointerdown) |
| - m_preventMouseEventForPointerTypeMouse = true; |
| + && pointerEvent->type() == EventTypeNames::pointerdown |
| + && pointerEvent->isPrimary()) { |
| + m_preventMouseEventForPointerType[toInt( |
| + mouseEvent.pointerProperties().pointerType)] = true; |
| + } |
| - if (!m_preventMouseEventForPointerTypeMouse) { |
| + if (pointerEvent->isPrimary() && !m_preventMouseEventForPointerType[toInt( |
| + mouseEvent.pointerProperties().pointerType)]) { |
| result = EventHandler::mergeEventResult(result, |
| dispatchMouseEvent(effectiveTarget, mouseEventType, mouseEvent, |
| nullptr, clickCount)); |
| @@ -381,7 +391,10 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent( |
| if (pointerEvent->buttons() == 0) { |
| releasePointerCapture(pointerEvent->pointerId()); |
| - m_preventMouseEventForPointerTypeMouse = false; |
| + if (pointerEvent->isPrimary()) { |
| + m_preventMouseEventForPointerType[toInt( |
| + mouseEvent.pointerProperties().pointerType)] = false; |
| + } |
| } |
| return result; |
| @@ -398,7 +411,9 @@ PointerEventManager::~PointerEventManager() |
| void PointerEventManager::clear() |
| { |
| - m_preventMouseEventForPointerTypeMouse = false; |
| + for (int type = 0; |
| + type <= toInt(WebPointerProperties::PointerType::LastEntry); type++) |
|
dtapuska
2016/04/05 19:21:25
use either arraysize here; or a range based for sh
Navid Zolghadr
2016/04/05 20:17:25
Done.
|
| + m_preventMouseEventForPointerType[type] = false; |
| m_pointerEventFactory.clear(); |
| m_nodeUnderPointer.clear(); |
| } |