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

Side by Side Diff: third_party/WebKit/Source/core/input/PointerEventManager.cpp

Issue 1855513002: Consider isPrimary and pointerType when preventing compat mouse (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/input/PointerEventManager.h" 5 #include "core/input/PointerEventManager.h"
6 6
7 #include "core/dom/shadow/FlatTreeTraversal.h" 7 #include "core/dom/shadow/FlatTreeTraversal.h"
8 #include "core/events/MouseEvent.h" 8 #include "core/events/MouseEvent.h"
9 #include "core/input/EventHandler.h" 9 #include "core/input/EventHandler.h"
10 10
11 namespace blink { 11 namespace blink {
12 12
13 namespace { 13 namespace {
14 14
15 inline size_t toPointerIndex(WebPointerProperties::PointerType t) { return stati c_cast<int>(t); }
dtapuska 2016/04/05 20:30:40 still change the static_cast as well.
Navid Zolghadr 2016/04/06 15:27:10 Oops. I missed it.
16
15 const AtomicString& pointerEventNameForTouchPointState(PlatformTouchPoint::Touch State state) 17 const AtomicString& pointerEventNameForTouchPointState(PlatformTouchPoint::Touch State state)
16 { 18 {
17 switch (state) { 19 switch (state) {
18 case PlatformTouchPoint::TouchReleased: 20 case PlatformTouchPoint::TouchReleased:
19 return EventTypeNames::pointerup; 21 return EventTypeNames::pointerup;
20 case PlatformTouchPoint::TouchCancelled: 22 case PlatformTouchPoint::TouchCancelled:
21 return EventTypeNames::pointercancel; 23 return EventTypeNames::pointercancel;
22 case PlatformTouchPoint::TouchPressed: 24 case PlatformTouchPoint::TouchPressed:
23 return EventTypeNames::pointerdown; 25 return EventTypeNames::pointerdown;
24 case PlatformTouchPoint::TouchMoved: 26 case PlatformTouchPoint::TouchMoved:
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 // Pointer event type does not matter as it will be overridden in the sendNo deTransitionEvents 115 // Pointer event type does not matter as it will be overridden in the sendNo deTransitionEvents
114 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = 116 RefPtrWillBeRawPtr<PointerEvent> pointerEvent =
115 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent, 117 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent,
116 nullptr, view); 118 nullptr, view);
117 119
118 // TODO(crbug/545647): This state should reset with pointercancel too. 120 // TODO(crbug/545647): This state should reset with pointercancel too.
119 // This function also gets called for compat mouse events of touch at this 121 // This function also gets called for compat mouse events of touch at this
120 // stage. So if the event is not frame boundary transition it is only a 122 // stage. So if the event is not frame boundary transition it is only a
121 // compatibility mouse event and we do not need to change pointer event 123 // compatibility mouse event and we do not need to change pointer event
122 // behavior regarding preventMouseEvent state in that case. 124 // behavior regarding preventMouseEvent state in that case.
123 if (isFrameBoundaryTransition && pointerEvent->buttons() == 0) { 125 if (isFrameBoundaryTransition && pointerEvent->buttons() == 0
124 m_preventMouseEventForPointerTypeMouse = false; 126 && pointerEvent->isPrimary()) {
127 m_preventMouseEventForPointerType[toPointerIndex(
128 mouseEvent.pointerProperties().pointerType)] = false;
125 } 129 }
126 130
127 processCaptureAndPositionOfPointerEvent(pointerEvent, enteredNode, 131 processCaptureAndPositionOfPointerEvent(pointerEvent, enteredNode,
128 exitedNode, mouseEvent, true, isFrameBoundaryTransition); 132 exitedNode, mouseEvent, true, isFrameBoundaryTransition);
129 } 133 }
130 134
131 void PointerEventManager::sendNodeTransitionEvents( 135 void PointerEventManager::sendNodeTransitionEvents(
132 PassRefPtrWillBeRawPtr<EventTarget> prpExitedTarget, 136 PassRefPtrWillBeRawPtr<EventTarget> prpExitedTarget,
133 PassRefPtrWillBeRawPtr<EventTarget> prpEnteredTarget, 137 PassRefPtrWillBeRawPtr<EventTarget> prpEnteredTarget,
134 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 138 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent,
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 PassRefPtrWillBeRawPtr<Node> lastNodeUnderMouse) 353 PassRefPtrWillBeRawPtr<Node> lastNodeUnderMouse)
350 { 354 {
351 RefPtrWillBeRawPtr<Node> target = prpTarget; 355 RefPtrWillBeRawPtr<Node> target = prpTarget;
352 356
353 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = 357 RefPtrWillBeRawPtr<PointerEvent> pointerEvent =
354 m_pointerEventFactory.create(mouseEventType, mouseEvent, 358 m_pointerEventFactory.create(mouseEventType, mouseEvent,
355 relatedTarget, view); 359 relatedTarget, view);
356 360
357 // This is for when the mouse is released outside of the page. 361 // This is for when the mouse is released outside of the page.
358 if (pointerEvent->type() == EventTypeNames::pointermove 362 if (pointerEvent->type() == EventTypeNames::pointermove
359 && !pointerEvent->buttons()) { 363 && !pointerEvent->buttons()
360 m_preventMouseEventForPointerTypeMouse = false; 364 && pointerEvent->isPrimary()) {
365 m_preventMouseEventForPointerType[toPointerIndex(
366 mouseEvent.pointerProperties().pointerType)] = false;
361 } 367 }
362 368
363 processCaptureAndPositionOfPointerEvent(pointerEvent, target, 369 processCaptureAndPositionOfPointerEvent(pointerEvent, target,
364 lastNodeUnderMouse, mouseEvent, true, true); 370 lastNodeUnderMouse, mouseEvent, true, true);
365 371
366 RefPtrWillBeRawPtr<EventTarget> effectiveTarget = 372 RefPtrWillBeRawPtr<EventTarget> effectiveTarget =
367 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()); 373 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId());
368 374
369 WebInputEventResult result = 375 WebInputEventResult result =
370 dispatchPointerEvent(effectiveTarget, pointerEvent); 376 dispatchPointerEvent(effectiveTarget, pointerEvent);
371 377
372 if (result != WebInputEventResult::NotHandled 378 if (result != WebInputEventResult::NotHandled
373 && pointerEvent->type() == EventTypeNames::pointerdown) 379 && pointerEvent->type() == EventTypeNames::pointerdown
374 m_preventMouseEventForPointerTypeMouse = true; 380 && pointerEvent->isPrimary()) {
381 m_preventMouseEventForPointerType[toPointerIndex(
382 mouseEvent.pointerProperties().pointerType)] = true;
383 }
375 384
376 if (!m_preventMouseEventForPointerTypeMouse) { 385 if (pointerEvent->isPrimary() && !m_preventMouseEventForPointerType[toPointe rIndex(
386 mouseEvent.pointerProperties().pointerType)]) {
377 result = EventHandler::mergeEventResult(result, 387 result = EventHandler::mergeEventResult(result,
378 dispatchMouseEvent(effectiveTarget, mouseEventType, mouseEvent, 388 dispatchMouseEvent(effectiveTarget, mouseEventType, mouseEvent,
379 nullptr, clickCount)); 389 nullptr, clickCount));
380 } 390 }
381 391
382 if (pointerEvent->buttons() == 0) { 392 if (pointerEvent->buttons() == 0) {
383 releasePointerCapture(pointerEvent->pointerId()); 393 releasePointerCapture(pointerEvent->pointerId());
384 m_preventMouseEventForPointerTypeMouse = false; 394 if (pointerEvent->isPrimary()) {
395 m_preventMouseEventForPointerType[toPointerIndex(
396 mouseEvent.pointerProperties().pointerType)] = false;
397 }
385 } 398 }
386 399
387 return result; 400 return result;
388 } 401 }
389 402
390 PointerEventManager::PointerEventManager() 403 PointerEventManager::PointerEventManager()
391 { 404 {
392 clear(); 405 clear();
393 } 406 }
394 407
395 PointerEventManager::~PointerEventManager() 408 PointerEventManager::~PointerEventManager()
396 { 409 {
397 } 410 }
398 411
399 void PointerEventManager::clear() 412 void PointerEventManager::clear()
400 { 413 {
401 m_preventMouseEventForPointerTypeMouse = false; 414 for (auto& entry : m_preventMouseEventForPointerType)
415 entry = false;
402 m_pointerEventFactory.clear(); 416 m_pointerEventFactory.clear();
403 m_nodeUnderPointer.clear(); 417 m_nodeUnderPointer.clear();
404 } 418 }
405 419
406 void PointerEventManager::processCaptureAndPositionOfPointerEvent( 420 void PointerEventManager::processCaptureAndPositionOfPointerEvent(
407 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 421 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent,
408 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget, 422 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget,
409 const PassRefPtrWillBeRawPtr<EventTarget> lastNodeUnderMouse, 423 const PassRefPtrWillBeRawPtr<EventTarget> lastNodeUnderMouse,
410 const PlatformMouseEvent& mouseEvent, 424 const PlatformMouseEvent& mouseEvent,
411 bool sendMouseEvent, bool setPointerPosition) 425 bool sendMouseEvent, bool setPointerPosition)
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 { 584 {
571 #if ENABLE(OILPAN) 585 #if ENABLE(OILPAN)
572 visitor->trace(m_nodeUnderPointer); 586 visitor->trace(m_nodeUnderPointer);
573 visitor->trace(m_pointerCaptureTarget); 587 visitor->trace(m_pointerCaptureTarget);
574 visitor->trace(m_pendingPointerCaptureTarget); 588 visitor->trace(m_pendingPointerCaptureTarget);
575 #endif 589 #endif
576 } 590 }
577 591
578 592
579 } // namespace blink 593 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698