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

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: Running "cl format" 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
« no previous file with comments | « third_party/WebKit/Source/core/input/PointerEventManager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 size_t toPointerTypeIndex(WebPointerProperties::PointerType t) { return static_c ast<size_t>(t); }
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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 // Pointer event type does not matter as it will be overridden in the sendNo deTransitionEvents 110 // Pointer event type does not matter as it will be overridden in the sendNo deTransitionEvents
109 PointerEvent* pointerEvent = 111 PointerEvent* pointerEvent =
110 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent, 112 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent,
111 nullptr, view); 113 nullptr, view);
112 114
113 // TODO(crbug/545647): This state should reset with pointercancel too. 115 // TODO(crbug/545647): This state should reset with pointercancel too.
114 // This function also gets called for compat mouse events of touch at this 116 // This function also gets called for compat mouse events of touch at this
115 // stage. So if the event is not frame boundary transition it is only a 117 // stage. So if the event is not frame boundary transition it is only a
116 // compatibility mouse event and we do not need to change pointer event 118 // compatibility mouse event and we do not need to change pointer event
117 // behavior regarding preventMouseEvent state in that case. 119 // behavior regarding preventMouseEvent state in that case.
118 if (isFrameBoundaryTransition && pointerEvent->buttons() == 0) { 120 if (isFrameBoundaryTransition && pointerEvent->buttons() == 0
119 m_preventMouseEventForPointerTypeMouse = false; 121 && pointerEvent->isPrimary()) {
122 m_preventMouseEventForPointerType[toPointerTypeIndex(
123 mouseEvent.pointerProperties().pointerType)] = false;
120 } 124 }
121 125
122 processCaptureAndPositionOfPointerEvent(pointerEvent, enteredNode, 126 processCaptureAndPositionOfPointerEvent(pointerEvent, enteredNode,
123 exitedNode, mouseEvent, true, isFrameBoundaryTransition); 127 exitedNode, mouseEvent, true, isFrameBoundaryTransition);
124 } 128 }
125 129
126 void PointerEventManager::sendNodeTransitionEvents( 130 void PointerEventManager::sendNodeTransitionEvents(
127 EventTarget* exitedTarget, 131 EventTarget* exitedTarget,
128 EventTarget* enteredTarget, 132 EventTarget* enteredTarget,
129 PointerEvent* pointerEvent, 133 PointerEvent* pointerEvent,
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 Node* relatedTarget, 352 Node* relatedTarget,
349 AbstractView* view, 353 AbstractView* view,
350 Node* lastNodeUnderMouse) 354 Node* lastNodeUnderMouse)
351 { 355 {
352 PointerEvent* pointerEvent = 356 PointerEvent* pointerEvent =
353 m_pointerEventFactory.create(mouseEventType, mouseEvent, 357 m_pointerEventFactory.create(mouseEventType, mouseEvent,
354 relatedTarget, view); 358 relatedTarget, view);
355 359
356 // This is for when the mouse is released outside of the page. 360 // This is for when the mouse is released outside of the page.
357 if (pointerEvent->type() == EventTypeNames::pointermove 361 if (pointerEvent->type() == EventTypeNames::pointermove
358 && !pointerEvent->buttons()) { 362 && !pointerEvent->buttons()
359 m_preventMouseEventForPointerTypeMouse = false; 363 && pointerEvent->isPrimary()) {
364 m_preventMouseEventForPointerType[toPointerTypeIndex(
365 mouseEvent.pointerProperties().pointerType)] = false;
360 } 366 }
361 367
362 processCaptureAndPositionOfPointerEvent(pointerEvent, target, 368 processCaptureAndPositionOfPointerEvent(pointerEvent, target,
363 lastNodeUnderMouse, mouseEvent, true, true); 369 lastNodeUnderMouse, mouseEvent, true, true);
364 370
365 EventTarget* effectiveTarget = 371 EventTarget* effectiveTarget =
366 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()); 372 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId());
367 373
368 WebInputEventResult result = 374 WebInputEventResult result =
369 dispatchPointerEvent(effectiveTarget, pointerEvent); 375 dispatchPointerEvent(effectiveTarget, pointerEvent);
370 376
371 if (result != WebInputEventResult::NotHandled 377 if (result != WebInputEventResult::NotHandled
372 && pointerEvent->type() == EventTypeNames::pointerdown) 378 && pointerEvent->type() == EventTypeNames::pointerdown
373 m_preventMouseEventForPointerTypeMouse = true; 379 && pointerEvent->isPrimary()) {
380 m_preventMouseEventForPointerType[toPointerTypeIndex(
381 mouseEvent.pointerProperties().pointerType)] = true;
382 }
374 383
375 if (!m_preventMouseEventForPointerTypeMouse) { 384 if (pointerEvent->isPrimary() && !m_preventMouseEventForPointerType[toPointe rTypeIndex(
385 mouseEvent.pointerProperties().pointerType)]) {
376 result = EventHandler::mergeEventResult(result, 386 result = EventHandler::mergeEventResult(result,
377 dispatchMouseEvent(effectiveTarget, mouseEventType, mouseEvent, 387 dispatchMouseEvent(effectiveTarget, mouseEventType, mouseEvent,
378 nullptr, clickCount)); 388 nullptr, clickCount));
379 } 389 }
380 390
381 if (pointerEvent->buttons() == 0) { 391 if (pointerEvent->buttons() == 0) {
382 releasePointerCapture(pointerEvent->pointerId()); 392 releasePointerCapture(pointerEvent->pointerId());
383 m_preventMouseEventForPointerTypeMouse = false; 393 if (pointerEvent->isPrimary()) {
394 m_preventMouseEventForPointerType[toPointerTypeIndex(
395 mouseEvent.pointerProperties().pointerType)] = false;
396 }
384 } 397 }
385 398
386 return result; 399 return result;
387 } 400 }
388 401
389 PointerEventManager::PointerEventManager() 402 PointerEventManager::PointerEventManager()
390 { 403 {
391 clear(); 404 clear();
392 } 405 }
393 406
394 PointerEventManager::~PointerEventManager() 407 PointerEventManager::~PointerEventManager()
395 { 408 {
396 } 409 }
397 410
398 void PointerEventManager::clear() 411 void PointerEventManager::clear()
399 { 412 {
400 m_preventMouseEventForPointerTypeMouse = false; 413 for (auto& entry : m_preventMouseEventForPointerType)
414 entry = false;
401 m_pointerEventFactory.clear(); 415 m_pointerEventFactory.clear();
402 m_nodeUnderPointer.clear(); 416 m_nodeUnderPointer.clear();
403 m_pointerCaptureTarget.clear(); 417 m_pointerCaptureTarget.clear();
404 m_pendingPointerCaptureTarget.clear(); 418 m_pendingPointerCaptureTarget.clear();
405 } 419 }
406 420
407 void PointerEventManager::processCaptureAndPositionOfPointerEvent( 421 void PointerEventManager::processCaptureAndPositionOfPointerEvent(
408 PointerEvent* pointerEvent, 422 PointerEvent* pointerEvent,
409 EventTarget* hitTestTarget, 423 EventTarget* hitTestTarget,
410 EventTarget* lastNodeUnderMouse, 424 EventTarget* lastNodeUnderMouse,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 584
571 DEFINE_TRACE(PointerEventManager) 585 DEFINE_TRACE(PointerEventManager)
572 { 586 {
573 visitor->trace(m_nodeUnderPointer); 587 visitor->trace(m_nodeUnderPointer);
574 visitor->trace(m_pointerCaptureTarget); 588 visitor->trace(m_pointerCaptureTarget);
575 visitor->trace(m_pendingPointerCaptureTarget); 589 visitor->trace(m_pendingPointerCaptureTarget);
576 } 590 }
577 591
578 592
579 } // namespace blink 593 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/input/PointerEventManager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698