| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 return scrollableArea; | 1132 return scrollableArea; |
| 1133 } | 1133 } |
| 1134 | 1134 |
| 1135 return nullptr; | 1135 return nullptr; |
| 1136 } | 1136 } |
| 1137 | 1137 |
| 1138 WebInputEventResult EventHandler::handleMouseMoveEvent(const PlatformMouseEvent&
event) | 1138 WebInputEventResult EventHandler::handleMouseMoveEvent(const PlatformMouseEvent&
event) |
| 1139 { | 1139 { |
| 1140 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); | 1140 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); |
| 1141 | 1141 |
| 1142 m_pointerEventManager.conditionallyEnableMouseEventForPointerTypeMouse( | |
| 1143 event.getModifiers()); | |
| 1144 | |
| 1145 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); | 1142 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); |
| 1146 | 1143 |
| 1147 HitTestResult hoveredNode = HitTestResult(); | 1144 HitTestResult hoveredNode = HitTestResult(); |
| 1148 WebInputEventResult result = handleMouseMoveOrLeaveEvent(event, &hoveredNode
); | 1145 WebInputEventResult result = handleMouseMoveOrLeaveEvent(event, &hoveredNode
); |
| 1149 | 1146 |
| 1150 Page* page = m_frame->page(); | 1147 Page* page = m_frame->page(); |
| 1151 if (!page) | 1148 if (!page) |
| 1152 return result; | 1149 return result; |
| 1153 | 1150 |
| 1154 if (PaintLayer* layer = layerForNode(hoveredNode.innerNode())) { | 1151 if (PaintLayer* layer = layerForNode(hoveredNode.innerNode())) { |
| 1155 if (ScrollableArea* layerScrollableArea = associatedScrollableArea(layer
)) | 1152 if (ScrollableArea* layerScrollableArea = associatedScrollableArea(layer
)) |
| 1156 layerScrollableArea->mouseMovedInContentArea(); | 1153 layerScrollableArea->mouseMovedInContentArea(); |
| 1157 } | 1154 } |
| 1158 | 1155 |
| 1159 if (FrameView* frameView = m_frame->view()) | 1156 if (FrameView* frameView = m_frame->view()) |
| 1160 frameView->mouseMovedInContentArea(); | 1157 frameView->mouseMovedInContentArea(); |
| 1161 | 1158 |
| 1162 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); | 1159 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); |
| 1163 page->chromeClient().mouseDidMoveOverElement(hoveredNode); | 1160 page->chromeClient().mouseDidMoveOverElement(hoveredNode); |
| 1164 | 1161 |
| 1165 return result; | 1162 return result; |
| 1166 } | 1163 } |
| 1167 | 1164 |
| 1168 void EventHandler::handleMouseLeaveEvent(const PlatformMouseEvent& event) | 1165 void EventHandler::handleMouseLeaveEvent(const PlatformMouseEvent& event) |
| 1169 { | 1166 { |
| 1170 TRACE_EVENT0("blink", "EventHandler::handleMouseLeaveEvent"); | 1167 TRACE_EVENT0("blink", "EventHandler::handleMouseLeaveEvent"); |
| 1171 | 1168 |
| 1172 m_pointerEventManager.conditionallyEnableMouseEventForPointerTypeMouse( | |
| 1173 event.getModifiers()); | |
| 1174 | |
| 1175 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); | 1169 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); |
| 1176 handleMouseMoveOrLeaveEvent(event, 0, false, true); | 1170 handleMouseMoveOrLeaveEvent(event, 0, false, true); |
| 1177 } | 1171 } |
| 1178 | 1172 |
| 1179 WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMous
eEvent& mouseEvent, HitTestResult* hoveredNode, bool onlyUpdateScrollbars, bool
forceLeave) | 1173 WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMous
eEvent& mouseEvent, HitTestResult* hoveredNode, bool onlyUpdateScrollbars, bool
forceLeave) |
| 1180 { | 1174 { |
| 1181 ASSERT(m_frame); | 1175 ASSERT(m_frame); |
| 1182 ASSERT(m_frame->view()); | 1176 ASSERT(m_frame->view()); |
| 1183 | 1177 |
| 1184 setLastKnownMousePosition(mouseEvent); | 1178 setLastKnownMousePosition(mouseEvent); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1249 | 1243 |
| 1250 WebInputEventResult eventResult = WebInputEventResult::NotHandled; | 1244 WebInputEventResult eventResult = WebInputEventResult::NotHandled; |
| 1251 RefPtrWillBeRawPtr<LocalFrame> newSubframe = m_capturingMouseEventsNode.get(
) ? subframeForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTest
Result(mev); | 1245 RefPtrWillBeRawPtr<LocalFrame> newSubframe = m_capturingMouseEventsNode.get(
) ? subframeForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTest
Result(mev); |
| 1252 | 1246 |
| 1253 // We want mouseouts to happen first, from the inside out. First send a mov
e event to the last subframe so that it will fire mouseouts. | 1247 // We want mouseouts to happen first, from the inside out. First send a mov
e event to the last subframe so that it will fire mouseouts. |
| 1254 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree().isD
escendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) | 1248 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree().isD
escendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) |
| 1255 m_lastMouseMoveEventSubframe->eventHandler().handleMouseLeaveEvent(mev.e
vent()); | 1249 m_lastMouseMoveEventSubframe->eventHandler().handleMouseLeaveEvent(mev.e
vent()); |
| 1256 | 1250 |
| 1257 if (newSubframe) { | 1251 if (newSubframe) { |
| 1258 // Update over/out state before passing the event to the subframe. | 1252 // Update over/out state before passing the event to the subframe. |
| 1259 updateMouseEventTargetNode(mev.innerNode(), mev.event()); | 1253 updateMouseEventTargetNodeAndSendEvents(mev.innerNode(), mev.event(), tr
ue); |
| 1260 | 1254 |
| 1261 // Event dispatch in updateMouseEventTargetNode may have caused the subf
rame of the target | 1255 // Event dispatch in updateMouseEventTargetNodeAndSendEvents may have ca
used the subframe of the target |
| 1262 // node to be detached from its FrameView, in which case the event shoul
d not be passed. | 1256 // node to be detached from its FrameView, in which case the event shoul
d not be passed. |
| 1263 if (newSubframe->view()) | 1257 if (newSubframe->view()) |
| 1264 eventResult = passMouseMoveEventToSubframe(mev, newSubframe.get(), h
overedNode); | 1258 eventResult = passMouseMoveEventToSubframe(mev, newSubframe.get(), h
overedNode); |
| 1265 } else { | 1259 } else { |
| 1266 if (scrollbar && !m_mousePressed) | 1260 if (scrollbar && !m_mousePressed) |
| 1267 scrollbar->mouseMoved(mev.event()); // Handle hover effects on platf
orms that support visual feedback on scrollbar hovering. | 1261 scrollbar->mouseMoved(mev.event()); // Handle hover effects on platf
orms that support visual feedback on scrollbar hovering. |
| 1268 if (FrameView* view = m_frame->view()) { | 1262 if (FrameView* view = m_frame->view()) { |
| 1269 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult()); | 1263 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult()); |
| 1270 if (optionalCursor.isCursorChange()) { | 1264 if (optionalCursor.isCursorChange()) { |
| 1271 view->setCursor(optionalCursor.cursor()); | 1265 view->setCursor(optionalCursor.cursor()); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1346 HitTestRequest request(hitType); | 1340 HitTestRequest request(hitType); |
| 1347 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent); | 1341 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent); |
| 1348 LocalFrame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetN
ode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); | 1342 LocalFrame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetN
ode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); |
| 1349 if (m_eventHandlerWillResetCapturingMouseEventsNode) | 1343 if (m_eventHandlerWillResetCapturingMouseEventsNode) |
| 1350 m_capturingMouseEventsNode = nullptr; | 1344 m_capturingMouseEventsNode = nullptr; |
| 1351 if (subframe) | 1345 if (subframe) |
| 1352 return passMouseReleaseEventToSubframe(mev, subframe); | 1346 return passMouseReleaseEventToSubframe(mev, subframe); |
| 1353 | 1347 |
| 1354 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mouseup, mev.innerNode(), m_clickCount, mev.event()); | 1348 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mouseup, mev.innerNode(), m_clickCount, mev.event()); |
| 1355 | 1349 |
| 1356 // TODO(crbug/545647): This state should reset with pointercancel too. | |
| 1357 m_pointerEventManager.conditionallyEnableMouseEventForPointerTypeMouse( | |
| 1358 mouseEvent.getModifiers()); | |
| 1359 | |
| 1360 bool contextMenuEvent = mouseEvent.button() == RightButton; | 1350 bool contextMenuEvent = mouseEvent.button() == RightButton; |
| 1361 #if OS(MACOSX) | 1351 #if OS(MACOSX) |
| 1362 // FIXME: The Mac port achieves the same behavior by checking whether the co
ntext menu is currently open in WebPage::mouseEvent(). Consider merging the impl
ementations. | 1352 // FIXME: The Mac port achieves the same behavior by checking whether the co
ntext menu is currently open in WebPage::mouseEvent(). Consider merging the impl
ementations. |
| 1363 if (mouseEvent.button() == LeftButton && mouseEvent.getModifiers() & Platfor
mEvent::CtrlKey) | 1353 if (mouseEvent.button() == LeftButton && mouseEvent.getModifiers() & Platfor
mEvent::CtrlKey) |
| 1364 contextMenuEvent = true; | 1354 contextMenuEvent = true; |
| 1365 #endif | 1355 #endif |
| 1366 | 1356 |
| 1367 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; | 1357 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; |
| 1368 if (m_clickCount > 0 && !contextMenuEvent && mev.innerNode() && m_clickNode
&& mev.innerNode()->canParticipateInFlatTree() && m_clickNode->canParticipateInF
latTree()) { | 1358 if (m_clickCount > 0 && !contextMenuEvent && mev.innerNode() && m_clickNode
&& mev.innerNode()->canParticipateInFlatTree() && m_clickNode->canParticipateInF
latTree()) { |
| 1369 // Updates distribution because a 'mouseup' event listener can make the | 1359 // Updates distribution because a 'mouseup' event listener can make the |
| 1370 // tree dirty at dispatchMouseEvent() invocation above. | 1360 // tree dirty at dispatchMouseEvent() invocation above. |
| 1371 // Unless distribution is updated, commonAncestor would hit ASSERT. | 1361 // Unless distribution is updated, commonAncestor would hit ASSERT. |
| 1372 // Both m_clickNode and mev.innerNode() don't need to be updated | 1362 // Both m_clickNode and mev.innerNode() don't need to be updated |
| 1373 // because commonAncestor() will exit early if their documents are diffe
rent. | 1363 // because commonAncestor() will exit early if their documents are diffe
rent. |
| 1374 m_clickNode->updateDistribution(); | 1364 m_clickNode->updateDistribution(); |
| 1375 if (Node* clickTargetNode = mev.innerNode()->commonAncestor( | 1365 if (Node* clickTargetNode = mev.innerNode()->commonAncestor( |
| 1376 *m_clickNode, parentForClickEvent)) { | 1366 *m_clickNode, parentForClickEvent)) { |
| 1377 | 1367 |
| 1378 // Dispatch mouseup directly w/o calling updateMouseEventTargetNode | 1368 // Dispatch mouseup directly w/o calling updateMouseEventTargetNodeA
ndSendEvents |
| 1379 // because the mouseup dispatch above has already updated it | 1369 // because the mouseup dispatch above has already updated it |
| 1380 // correctly. Moreover, clickTargetNode is different from | 1370 // correctly. Moreover, clickTargetNode is different from |
| 1381 // mev.innerNode at drag-release. | 1371 // mev.innerNode at drag-release. |
| 1382 clickEventResult = toWebInputEventResult(clickTargetNode->dispatchMo
useEvent(mev.event(), | 1372 clickEventResult = toWebInputEventResult(clickTargetNode->dispatchMo
useEvent(mev.event(), |
| 1383 EventTypeNames::click, m_clickCount)); | 1373 EventTypeNames::click, m_clickCount)); |
| 1384 } | 1374 } |
| 1385 } | 1375 } |
| 1386 | 1376 |
| 1387 if (m_resizeScrollableArea) { | 1377 if (m_resizeScrollableArea) { |
| 1388 m_resizeScrollableArea->setInResizeMode(false); | 1378 m_resizeScrollableArea->setInResizeMode(false); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1583 } | 1573 } |
| 1584 | 1574 |
| 1585 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques
t& request, const PlatformMouseEvent& mev) | 1575 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques
t& request, const PlatformMouseEvent& mev) |
| 1586 { | 1576 { |
| 1587 ASSERT(m_frame); | 1577 ASSERT(m_frame); |
| 1588 ASSERT(m_frame->document()); | 1578 ASSERT(m_frame->document()); |
| 1589 | 1579 |
| 1590 return m_frame->document()->prepareMouseEvent(request, contentPointFromRootF
rame(m_frame, mev.position()), mev); | 1580 return m_frame->document()->prepareMouseEvent(request, contentPointFromRootF
rame(m_frame, mev.position()), mev); |
| 1591 } | 1581 } |
| 1592 | 1582 |
| 1593 void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo
useEvent& mouseEvent) | 1583 PassRefPtrWillBeRawPtr<Node> EventHandler::updateMouseEventTargetNode(Node* targ
etNode, |
| 1584 const PlatformMouseEvent& mouseEvent) |
| 1594 { | 1585 { |
| 1595 Node* result = targetNode; | 1586 Node* result = targetNode; |
| 1596 | 1587 |
| 1597 // If we're capturing, we always go right to that node. | 1588 // If we're capturing, we always go right to that node. |
| 1598 if (m_capturingMouseEventsNode) { | 1589 if (m_capturingMouseEventsNode) { |
| 1599 result = m_capturingMouseEventsNode.get(); | 1590 result = m_capturingMouseEventsNode.get(); |
| 1600 } else { | 1591 } else { |
| 1601 // If the target node is a text node, dispatch on the parent node - rdar
://4196646 | 1592 // If the target node is a text node, dispatch on the parent node - rdar
://4196646 |
| 1602 if (result && result->isTextNode()) | 1593 if (result && result->isTextNode()) |
| 1603 result = FlatTreeTraversal::parent(*result); | 1594 result = FlatTreeTraversal::parent(*result); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1631 // The mouse has moved between layers. | 1622 // The mouse has moved between layers. |
| 1632 if (ScrollableArea* scrollableAreaForNodeUnderMouse = associatedScrollab
leArea(layerForNodeUnderMouse)) | 1623 if (ScrollableArea* scrollableAreaForNodeUnderMouse = associatedScrollab
leArea(layerForNodeUnderMouse)) |
| 1633 scrollableAreaForNodeUnderMouse->mouseEnteredContentArea(); | 1624 scrollableAreaForNodeUnderMouse->mouseEnteredContentArea(); |
| 1634 } | 1625 } |
| 1635 | 1626 |
| 1636 if (lastNodeUnderMouse && lastNodeUnderMouse->document() != m_frame->documen
t()) { | 1627 if (lastNodeUnderMouse && lastNodeUnderMouse->document() != m_frame->documen
t()) { |
| 1637 lastNodeUnderMouse = nullptr; | 1628 lastNodeUnderMouse = nullptr; |
| 1638 m_lastScrollbarUnderMouse = nullptr; | 1629 m_lastScrollbarUnderMouse = nullptr; |
| 1639 } | 1630 } |
| 1640 | 1631 |
| 1641 m_pointerEventManager.sendNodeTransitionEvents(lastNodeUnderMouse, | 1632 return lastNodeUnderMouse; |
| 1642 m_nodeUnderMouse, mouseEvent, m_frame->document()->domWindow()); | 1633 } |
| 1634 |
| 1635 void EventHandler::updateMouseEventTargetNodeAndSendEvents(Node* targetNode, |
| 1636 const PlatformMouseEvent& mouseEvent, bool isFrameBoundaryTransition) |
| 1637 { |
| 1638 RefPtrWillBeRawPtr<Node> lastNodeUnderMouse = updateMouseEventTargetNode(tar
getNode, mouseEvent); |
| 1639 m_pointerEventManager.sendMouseAndPossiblyPointerNodeTransitionEvents( |
| 1640 lastNodeUnderMouse, m_nodeUnderMouse, mouseEvent, |
| 1641 m_frame->document()->domWindow(), isFrameBoundaryTransition); |
| 1643 } | 1642 } |
| 1644 | 1643 |
| 1645 WebInputEventResult EventHandler::dispatchMouseEvent(const AtomicString& eventTy
pe, Node* targetNode, int clickCount, const PlatformMouseEvent& mouseEvent) | 1644 WebInputEventResult EventHandler::dispatchMouseEvent(const AtomicString& eventTy
pe, Node* targetNode, int clickCount, const PlatformMouseEvent& mouseEvent) |
| 1646 { | 1645 { |
| 1647 updateMouseEventTargetNode(targetNode, mouseEvent); | 1646 updateMouseEventTargetNodeAndSendEvents(targetNode, mouseEvent); |
| 1648 if (!m_nodeUnderMouse) | 1647 if (!m_nodeUnderMouse) |
| 1649 return WebInputEventResult::NotHandled; | 1648 return WebInputEventResult::NotHandled; |
| 1650 | 1649 |
| 1651 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(eventType, m_nodeU
nderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); | 1650 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(eventType, m_nodeU
nderMouse->document().domWindow(), mouseEvent, clickCount, nullptr); |
| 1652 return toWebInputEventResult(m_nodeUnderMouse->dispatchEvent(event)); | 1651 return toWebInputEventResult(m_nodeUnderMouse->dispatchEvent(event)); |
| 1653 } | 1652 } |
| 1654 | 1653 |
| 1655 bool EventHandler::isPointerEventActive(int pointerId) | 1654 bool EventHandler::isPointerEventActive(int pointerId) |
| 1656 { | 1655 { |
| 1657 return m_pointerEventManager.isActive(pointerId); | 1656 return m_pointerEventManager.isActive(pointerId); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1673 m_pointerEventManager.elementRemoved(target); | 1672 m_pointerEventManager.elementRemoved(target); |
| 1674 } | 1673 } |
| 1675 | 1674 |
| 1676 // TODO(mustaq): Make PE drive ME dispatch & bookkeeping in EventHandler. | 1675 // TODO(mustaq): Make PE drive ME dispatch & bookkeeping in EventHandler. |
| 1677 WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents(const Ato
micString& mouseEventType, Node* targetNode, int clickCount, const PlatformMouse
Event& mouseEvent) | 1676 WebInputEventResult EventHandler::updatePointerTargetAndDispatchEvents(const Ato
micString& mouseEventType, Node* targetNode, int clickCount, const PlatformMouse
Event& mouseEvent) |
| 1678 { | 1677 { |
| 1679 ASSERT(mouseEventType == EventTypeNames::mousedown | 1678 ASSERT(mouseEventType == EventTypeNames::mousedown |
| 1680 || mouseEventType == EventTypeNames::mousemove | 1679 || mouseEventType == EventTypeNames::mousemove |
| 1681 || mouseEventType == EventTypeNames::mouseup); | 1680 || mouseEventType == EventTypeNames::mouseup); |
| 1682 | 1681 |
| 1683 updateMouseEventTargetNode(targetNode, mouseEvent); | 1682 RefPtrWillBeRawPtr<Node> lastNodeUnderMouse = updateMouseEventTargetNode(tar
getNode, mouseEvent); |
| 1684 if (!m_nodeUnderMouse) | |
| 1685 return WebInputEventResult::NotHandled; | |
| 1686 | 1683 |
| 1687 return m_pointerEventManager.sendMousePointerEvent( | 1684 return m_pointerEventManager.sendMousePointerEvent( |
| 1688 m_nodeUnderMouse, mouseEventType, clickCount, mouseEvent, nullptr, | 1685 m_nodeUnderMouse, mouseEventType, clickCount, mouseEvent, nullptr, |
| 1689 m_frame->document()->domWindow()); | 1686 m_frame->document()->domWindow(), lastNodeUnderMouse); |
| 1690 } | 1687 } |
| 1691 | 1688 |
| 1692 WebInputEventResult EventHandler::handleMouseFocus(const MouseEventWithHitTestRe
sults& targetedEvent, InputDeviceCapabilities* sourceCapabilities) | 1689 WebInputEventResult EventHandler::handleMouseFocus(const MouseEventWithHitTestRe
sults& targetedEvent, InputDeviceCapabilities* sourceCapabilities) |
| 1693 { | 1690 { |
| 1694 // If clicking on a frame scrollbar, do not mess up with content focus. | 1691 // If clicking on a frame scrollbar, do not mess up with content focus. |
| 1695 if (targetedEvent.hitTestResult().scrollbar() && m_frame->contentLayoutObjec
t()) { | 1692 if (targetedEvent.hitTestResult().scrollbar() && m_frame->contentLayoutObjec
t()) { |
| 1696 if (targetedEvent.hitTestResult().scrollbar()->getScrollableArea() == m_
frame->contentLayoutObject()->getScrollableArea()) | 1693 if (targetedEvent.hitTestResult().scrollbar()->getScrollableArea() == m_
frame->contentLayoutObject()->getScrollableArea()) |
| 1697 return WebInputEventResult::NotHandled; | 1694 return WebInputEventResult::NotHandled; |
| 1698 } | 1695 } |
| 1699 | 1696 |
| (...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2634 unsigned modifiers = gestureEvent.getModifiers(); | 2631 unsigned modifiers = gestureEvent.getModifiers(); |
| 2635 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa
lPosition(), | 2632 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa
lPosition(), |
| 2636 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, | 2633 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, |
| 2637 static_cast<PlatformEvent::Modifiers>(modifiers), | 2634 static_cast<PlatformEvent::Modifiers>(modifiers), |
| 2638 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerPrope
rties::PointerType::Mouse); | 2635 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerPrope
rties::PointerType::Mouse); |
| 2639 | 2636 |
| 2640 // Update the mouseout/mouseleave event | 2637 // Update the mouseout/mouseleave event |
| 2641 size_t indexExitedFrameChain = exitedFrameChain.size(); | 2638 size_t indexExitedFrameChain = exitedFrameChain.size(); |
| 2642 while (indexExitedFrameChain) { | 2639 while (indexExitedFrameChain) { |
| 2643 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain]; | 2640 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain]; |
| 2644 leaveFrame->eventHandler().updateMouseEventTargetNode(nullptr, fakeMouse
Move); | 2641 leaveFrame->eventHandler().updateMouseEventTargetNodeAndSendEvents(nullp
tr, fakeMouseMove); |
| 2645 } | 2642 } |
| 2646 | 2643 |
| 2647 // update the mouseover/mouseenter event | 2644 // update the mouseover/mouseenter event |
| 2648 while (indexEnteredFrameChain) { | 2645 while (indexEnteredFrameChain) { |
| 2649 Frame* parentFrame = enteredFrameChain[--indexEnteredFrameChain]->tree()
.parent(); | 2646 Frame* parentFrame = enteredFrameChain[--indexEnteredFrameChain]->tree()
.parent(); |
| 2650 if (parentFrame && parentFrame->isLocalFrame()) | 2647 if (parentFrame && parentFrame->isLocalFrame()) |
| 2651 toLocalFrame(parentFrame)->eventHandler().updateMouseEventTargetNode
(toHTMLFrameOwnerElement(enteredFrameChain[indexEnteredFrameChain]->owner()), fa
keMouseMove); | 2648 toLocalFrame(parentFrame)->eventHandler().updateMouseEventTargetNode
AndSendEvents(toHTMLFrameOwnerElement(enteredFrameChain[indexEnteredFrameChain]-
>owner()), fakeMouseMove); |
| 2652 } | 2649 } |
| 2653 } | 2650 } |
| 2654 | 2651 |
| 2655 GestureEventWithHitTestResults EventHandler::targetGestureEvent(const PlatformGe
stureEvent& gestureEvent, bool readOnly) | 2652 GestureEventWithHitTestResults EventHandler::targetGestureEvent(const PlatformGe
stureEvent& gestureEvent, bool readOnly) |
| 2656 { | 2653 { |
| 2657 TRACE_EVENT0("input", "EventHandler::targetGestureEvent"); | 2654 TRACE_EVENT0("input", "EventHandler::targetGestureEvent"); |
| 2658 | 2655 |
| 2659 ASSERT(m_frame == m_frame->localFrameRoot()); | 2656 ASSERT(m_frame == m_frame->localFrameRoot()); |
| 2660 // Scrolling events get hit tested per frame (like wheel events do). | 2657 // Scrolling events get hit tested per frame (like wheel events do). |
| 2661 ASSERT(!gestureEvent.isScrollEvent()); | 2658 ASSERT(!gestureEvent.isScrollEvent()); |
| (...skipping 1307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3969 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() | 3966 PlatformEvent::Modifiers EventHandler::accessKeyModifiers() |
| 3970 { | 3967 { |
| 3971 #if OS(MACOSX) | 3968 #if OS(MACOSX) |
| 3972 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); | 3969 return static_cast<PlatformEvent::Modifiers>(PlatformEvent::CtrlKey | Platfo
rmEvent::AltKey); |
| 3973 #else | 3970 #else |
| 3974 return PlatformEvent::AltKey; | 3971 return PlatformEvent::AltKey; |
| 3975 #endif | 3972 #endif |
| 3976 } | 3973 } |
| 3977 | 3974 |
| 3978 } // namespace blink | 3975 } // namespace blink |
| OLD | NEW |