Index: Source/core/page/EventHandler.cpp |
diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp |
index 757bdf11c82ae9d1d1eb1f115577fc3b10074a04..05a88d82f4f5e66a24b3e1a58cb4229e53c918ef 100644 |
--- a/Source/core/page/EventHandler.cpp |
+++ b/Source/core/page/EventHandler.cpp |
@@ -1283,7 +1283,7 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) |
m_frame->selection().setCaretBlinkingSuspended(true); |
- bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.targetNode(), m_clickCount, mouseEvent, true); |
+ bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.targetNode(), m_clickCount, mouseEvent, true, false); |
swallowEvent = swallowEvent || handleMouseFocus(mouseEvent); |
m_capturesDragging = !swallowEvent || mev.scrollbar(); |
@@ -1398,7 +1398,7 @@ bool EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMouseEvent& mouseEv |
} |
if (m_frameSetBeingResized) |
- return !dispatchMouseEvent(EventTypeNames::mousemove, m_frameSetBeingResized.get(), 0, mouseEvent, false); |
+ return !dispatchMouseEvent(EventTypeNames::mousemove, m_frameSetBeingResized.get(), 0, mouseEvent, false, false); |
// Send events right to a scrollbar if the mouse is pressed. |
if (m_lastScrollbarUnderMouse && m_mousePressed) { |
@@ -1453,7 +1453,7 @@ bool EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMouseEvent& mouseEv |
if (newSubframe) { |
// Update over/out state before passing the event to the subframe. |
- updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); |
+ updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true, false); |
// Event dispatch in updateMouseEventTargetNode may have caused the subframe of the target |
// node to be detached from its FrameView, in which case the event should not be passed. |
@@ -1476,7 +1476,7 @@ bool EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMouseEvent& mouseEv |
if (swallowEvent) |
return true; |
- swallowEvent = !dispatchMouseEvent(EventTypeNames::mousemove, mev.targetNode(), 0, mouseEvent, true); |
+ swallowEvent = !dispatchMouseEvent(EventTypeNames::mousemove, mev.targetNode(), 0, mouseEvent, true, false); |
if (!swallowEvent) |
swallowEvent = handleMouseDraggedEvent(mev); |
@@ -1528,13 +1528,13 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) |
} |
if (m_frameSetBeingResized) |
- return !dispatchMouseEvent(EventTypeNames::mouseup, m_frameSetBeingResized.get(), m_clickCount, mouseEvent, false); |
+ return !dispatchMouseEvent(EventTypeNames::mouseup, m_frameSetBeingResized.get(), m_clickCount, mouseEvent, false, false); |
if (m_lastScrollbarUnderMouse) { |
invalidateClick(); |
m_lastScrollbarUnderMouse->mouseUp(mouseEvent); |
bool setUnder = false; |
- return !dispatchMouseEvent(EventTypeNames::mouseup, m_lastNodeUnderMouse.get(), m_clickCount, mouseEvent, setUnder); |
+ return !dispatchMouseEvent(EventTypeNames::mouseup, m_lastNodeUnderMouse.get(), m_clickCount, mouseEvent, setUnder, false); |
} |
// Mouse events simulated from touch should not hit-test again. |
@@ -1549,7 +1549,7 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) |
if (subframe && passMouseReleaseEventToSubframe(mev, subframe)) |
return true; |
- bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, mev.targetNode(), m_clickCount, mouseEvent, false); |
+ bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, mev.targetNode(), m_clickCount, mouseEvent, false, false); |
bool contextMenuEvent = mouseEvent.button() == RightButton; |
#if OS(MACOSX) |
@@ -1561,7 +1561,7 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) |
bool swallowClickEvent = false; |
if (m_clickCount > 0 && !contextMenuEvent && mev.targetNode() && m_clickNode) { |
if (Node* clickTargetNode = mev.targetNode()->commonAncestor(*m_clickNode, parentForClickEvent)) |
- swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, clickTargetNode, m_clickCount, mouseEvent, true); |
+ swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, clickTargetNode, m_clickCount, mouseEvent, true, false); |
} |
if (m_resizeScrollableArea) { |
@@ -1804,7 +1804,7 @@ MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques |
return m_frame->document()->prepareMouseEvent(request, documentPointForWindowPoint(m_frame, mev.position()), mev); |
} |
-void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMouseEvent& mouseEvent, bool fireMouseOverOut) |
+void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMouseEvent& mouseEvent, bool fireMouseOverOut, bool derivesFromTouch) |
{ |
Node* result = targetNode; |
@@ -1856,20 +1856,20 @@ void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo |
if (m_lastNodeUnderMouse != m_nodeUnderMouse) { |
// send mouseout event to the old node |
if (m_lastNodeUnderMouse) |
- m_lastNodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseout, 0, m_nodeUnderMouse.get()); |
+ m_lastNodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseout, 0, m_nodeUnderMouse.get(), derivesFromTouch); |
// send mouseover event to the new node |
if (m_nodeUnderMouse) |
- m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseover, 0, m_lastNodeUnderMouse.get()); |
+ m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, EventTypeNames::mouseover, 0, m_lastNodeUnderMouse.get(), derivesFromTouch); |
} |
m_lastNodeUnderMouse = m_nodeUnderMouse; |
} |
} |
// The return value means 'continue default handling.' |
-bool EventHandler::dispatchMouseEvent(const AtomicString& eventType, Node* targetNode, int clickCount, const PlatformMouseEvent& mouseEvent, bool setUnder) |
+bool EventHandler::dispatchMouseEvent(const AtomicString& eventType, Node* targetNode, int clickCount, const PlatformMouseEvent& mouseEvent, bool setUnder, bool derivesFromTouch) |
{ |
- updateMouseEventTargetNode(targetNode, mouseEvent, setUnder); |
- return !m_nodeUnderMouse || m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, eventType, clickCount); |
+ updateMouseEventTargetNode(targetNode, mouseEvent, setUnder, derivesFromTouch); |
+ return !m_nodeUnderMouse || m_nodeUnderMouse->dispatchMouseEvent(mouseEvent, eventType, clickCount, 0, derivesFromTouch); |
} |
// The return value means 'swallow event' (was handled), as for other handle* functions. |
@@ -2238,7 +2238,7 @@ bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target |
PlatformMouseEvent fakeMouseMove(adjustedPoint, gestureEvent.globalPosition(), |
NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, |
modifiers, PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); |
- dispatchMouseEvent(EventTypeNames::mousemove, newHitTest.targetNode(), 0, fakeMouseMove, true); |
+ dispatchMouseEvent(EventTypeNames::mousemove, newHitTest.targetNode(), 0, fakeMouseMove, true, true); |
Rick Byers
2014/08/19 16:06:47
Rather than take a completely new bool here, this
|
// Do a new hit-test in case the mousemove event changed the DOM. |
// FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug.com/398920 |
@@ -2250,7 +2250,7 @@ bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target |
PlatformMouseEvent fakeMouseDown(adjustedPoint, gestureEvent.globalPosition(), |
LeftButton, PlatformEvent::MousePressed, gestureEvent.tapCount(), |
modifiers, PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); |
- bool swallowMouseDownEvent = !dispatchMouseEvent(EventTypeNames::mousedown, newHitTest.targetNode(), gestureEvent.tapCount(), fakeMouseDown, true); |
+ bool swallowMouseDownEvent = !dispatchMouseEvent(EventTypeNames::mousedown, newHitTest.targetNode(), gestureEvent.tapCount(), fakeMouseDown, true, true); |
if (!swallowMouseDownEvent) |
swallowMouseDownEvent = handleMouseFocus(fakeMouseDown); |
if (!swallowMouseDownEvent) |
@@ -2261,12 +2261,12 @@ bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target |
PlatformMouseEvent fakeMouseUp(adjustedPoint, gestureEvent.globalPosition(), |
LeftButton, PlatformEvent::MouseReleased, gestureEvent.tapCount(), |
modifiers, PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); |
- bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, newHitTest.targetNode(), gestureEvent.tapCount(), fakeMouseUp, false); |
+ bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, newHitTest.targetNode(), gestureEvent.tapCount(), fakeMouseUp, false, true); |
bool swallowClickEvent = false; |
if (m_clickNode) { |
Node* clickTargetNode = newHitTest.targetNode()->commonAncestor(*m_clickNode, parentForClickEvent); |
- swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, clickTargetNode, gestureEvent.tapCount(), fakeMouseUp, true); |
+ swallowClickEvent = !dispatchMouseEvent(EventTypeNames::click, clickTargetNode, gestureEvent.tapCount(), fakeMouseUp, true, true); |
m_clickNode = nullptr; |
} |
@@ -2689,7 +2689,7 @@ bool EventHandler::sendContextMenuEvent(const PlatformMouseEvent& event) |
selectClosestWordOrLinkFromMouseEvent(mev); |
} |
- return !dispatchMouseEvent(EventTypeNames::contextmenu, mev.targetNode(), 0, event, false); |
+ return !dispatchMouseEvent(EventTypeNames::contextmenu, mev.targetNode(), 0, event, false, false); |
} |
bool EventHandler::sendContextMenuEventForKey() |