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

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

Issue 2521993003: Send boundary events before gotpointercapture (Closed)
Patch Set: Created 4 years, 1 month 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/LayoutTests/fast/events/pointerevents/touch-capture-expected.txt ('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/DocumentUserGestureToken.h" 7 #include "core/dom/DocumentUserGestureToken.h"
8 #include "core/dom/ElementTraversal.h" 8 #include "core/dom/ElementTraversal.h"
9 #include "core/dom/shadow/FlatTreeTraversal.h" 9 #include "core/dom/shadow/FlatTreeTraversal.h"
10 #include "core/events/MouseEvent.h" 10 #include "core/events/MouseEvent.h"
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 return pointerCaptureTargetTemp != pendingPointercaptureTargetTemp; 551 return pointerCaptureTargetTemp != pendingPointercaptureTargetTemp;
552 } 552 }
553 553
554 EventTarget* PointerEventManager::processCaptureAndPositionOfPointerEvent( 554 EventTarget* PointerEventManager::processCaptureAndPositionOfPointerEvent(
555 PointerEvent* pointerEvent, 555 PointerEvent* pointerEvent,
556 EventTarget* hitTestTarget, 556 EventTarget* hitTestTarget,
557 const PlatformMouseEvent& mouseEvent, 557 const PlatformMouseEvent& mouseEvent,
558 bool sendMouseEvent) { 558 bool sendMouseEvent) {
559 processPendingPointerCapture(pointerEvent); 559 processPendingPointerCapture(pointerEvent);
560 560
561 if (!RuntimeEnabledFeatures::pointerEventV1SpecCapturingEnabled()) { 561 if (!RuntimeEnabledFeatures::pointerEventV1SpecCapturingEnabled()) {
mustaq 2016/11/22 21:46:36 Wait...one last thing: - With pointerEventV1SpecC
Navid Zolghadr 2016/11/22 21:58:11 - I noticed this problem before actually. I could
mustaq 2016/11/23 15:38:47 I vote for #3.
Navid Zolghadr 2016/11/23 15:59:39 Alright. I work on this before this lands. This ch
562 PointerCapturingMap::const_iterator it = 562 PointerCapturingMap::const_iterator it =
563 m_pointerCaptureTarget.find(pointerEvent->pointerId()); 563 m_pointerCaptureTarget.find(pointerEvent->pointerId());
564 if (EventTarget* pointercaptureTarget = 564 if (EventTarget* pointercaptureTarget =
565 (it != m_pointerCaptureTarget.end()) ? it->value : nullptr) 565 (it != m_pointerCaptureTarget.end()) ? it->value : nullptr)
566 hitTestTarget = pointercaptureTarget; 566 hitTestTarget = pointercaptureTarget;
567 } 567 }
568 568
569 setNodeUnderPointer(pointerEvent, hitTestTarget); 569 setNodeUnderPointer(pointerEvent, hitTestTarget);
570 if (sendMouseEvent) { 570 if (sendMouseEvent) {
571 m_mouseEventManager->setNodeUnderMouse( 571 m_mouseEventManager->setNodeUnderMouse(
(...skipping 19 matching lines...) Expand all
591 // Re-target lostpointercapture to the document when the element is 591 // Re-target lostpointercapture to the document when the element is
592 // no longer participating in the tree. 592 // no longer participating in the tree.
593 EventTarget* target = pointerCaptureTarget; 593 EventTarget* target = pointerCaptureTarget;
594 if (target->toNode() && !target->toNode()->isConnected()) { 594 if (target->toNode() && !target->toNode()->isConnected()) {
595 target = target->toNode()->ownerDocument(); 595 target = target->toNode()->ownerDocument();
596 } 596 }
597 dispatchPointerEvent(target, 597 dispatchPointerEvent(target,
598 m_pointerEventFactory.createPointerCaptureEvent( 598 m_pointerEventFactory.createPointerCaptureEvent(
599 pointerEvent, EventTypeNames::lostpointercapture)); 599 pointerEvent, EventTypeNames::lostpointercapture));
600 } 600 }
601 // Note that If pendingPointerCaptureTarget is null dispatchPointerEvent
602 // automatically does nothing.
603 dispatchPointerEvent(pendingPointerCaptureTarget,
604 m_pointerEventFactory.createPointerCaptureEvent(
605 pointerEvent, EventTypeNames::gotpointercapture));
606 601
607 if (pendingPointerCaptureTarget) 602 if (pendingPointerCaptureTarget) {
603 setNodeUnderPointer(pointerEvent, pendingPointerCaptureTarget);
604 dispatchPointerEvent(pendingPointerCaptureTarget,
605 m_pointerEventFactory.createPointerCaptureEvent(
606 pointerEvent, EventTypeNames::gotpointercapture));
608 m_pointerCaptureTarget.set(pointerId, pendingPointerCaptureTarget); 607 m_pointerCaptureTarget.set(pointerId, pendingPointerCaptureTarget);
609 else 608 } else {
610 m_pointerCaptureTarget.remove(pointerId); 609 m_pointerCaptureTarget.remove(pointerId);
610 }
611 } 611 }
612 612
613 void PointerEventManager::removeTargetFromPointerCapturingMapping( 613 void PointerEventManager::removeTargetFromPointerCapturingMapping(
614 PointerCapturingMap& map, 614 PointerCapturingMap& map,
615 const EventTarget* target) { 615 const EventTarget* target) {
616 // We could have kept a reverse mapping to make this deletion possibly 616 // We could have kept a reverse mapping to make this deletion possibly
617 // faster but it adds some code complication which might not be worth of 617 // faster but it adds some code complication which might not be worth of
618 // the performance improvement considering there might not be a lot of 618 // the performance improvement considering there might not be a lot of
619 // active pointer or pointer captures at the same time. 619 // active pointer or pointer captures at the same time.
620 PointerCapturingMap tmp = map; 620 PointerCapturingMap tmp = map;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 return true; 719 return true;
720 } 720 }
721 return false; 721 return false;
722 } 722 }
723 723
724 EventTarget* PointerEventManager::getMouseCapturingNode() { 724 EventTarget* PointerEventManager::getMouseCapturingNode() {
725 return getCapturingNode(PointerEventFactory::s_mouseId); 725 return getCapturingNode(PointerEventFactory::s_mouseId);
726 } 726 }
727 727
728 } // namespace blink 728 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/fast/events/pointerevents/touch-capture-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698