| 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 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 // is on a mouse press. The problem is the <embed> node only starts | 378 // is on a mouse press. The problem is the <embed> node only starts |
| 379 // capturing mouse events *after* m_mousePressed for the containing frame | 379 // capturing mouse events *after* m_mousePressed for the containing frame |
| 380 // has already been set to true. As a result, the frame's EventHandler | 380 // has already been set to true. As a result, the frame's EventHandler |
| 381 // never sees the mouse release event, which is supposed to reset | 381 // never sees the mouse release event, which is supposed to reset |
| 382 // m_mousePressed... so m_mousePressed ends up remaining true until the | 382 // m_mousePressed... so m_mousePressed ends up remaining true until the |
| 383 // event handler finally gets another mouse released event. Oops. | 383 // event handler finally gets another mouse released event. Oops. |
| 384 // 2. Dragging doesn't start until after a mouse press event, but a drag | 384 // 2. Dragging doesn't start until after a mouse press event, but a drag |
| 385 // that ends as a result of a mouse release does not send a mouse release | 385 // that ends as a result of a mouse release does not send a mouse release |
| 386 // event. As a result, m_mousePressed also ends up remaining true until | 386 // event. As a result, m_mousePressed also ends up remaining true until |
| 387 // the next mouse release event seen by the EventHandler. | 387 // the next mouse release event seen by the EventHandler. |
| 388 if (event.event().button() != LeftButton) | 388 if (event.event().pointerProperties().button != WebPointerProperties::Button
::Left) |
| 389 m_mousePressed = false; | 389 m_mousePressed = false; |
| 390 | 390 |
| 391 if (!m_mousePressed) | 391 if (!m_mousePressed) |
| 392 return WebInputEventResult::NotHandled; | 392 return WebInputEventResult::NotHandled; |
| 393 | 393 |
| 394 if (handleDrag(event, DragInitiator::Mouse)) | 394 if (handleDrag(event, DragInitiator::Mouse)) |
| 395 return WebInputEventResult::HandledSystem; | 395 return WebInputEventResult::HandledSystem; |
| 396 | 396 |
| 397 Node* targetNode = event.innerNode(); | 397 Node* targetNode = event.innerNode(); |
| 398 if (!targetNode) | 398 if (!targetNode) |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 return view ? view->rootFrameToContents(pointInRootFrame) : pointInRootFrame
; | 771 return view ? view->rootFrameToContents(pointInRootFrame) : pointInRootFrame
; |
| 772 } | 772 } |
| 773 | 773 |
| 774 WebInputEventResult EventHandler::handleMousePressEvent(const PlatformMouseEvent
& mouseEvent) | 774 WebInputEventResult EventHandler::handleMousePressEvent(const PlatformMouseEvent
& mouseEvent) |
| 775 { | 775 { |
| 776 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent"); | 776 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent"); |
| 777 | 777 |
| 778 // For 4th/5th button in the mouse since Chrome does not yet send | 778 // For 4th/5th button in the mouse since Chrome does not yet send |
| 779 // button value to Blink but in some cases it does send the event. | 779 // button value to Blink but in some cases it does send the event. |
| 780 // This check is needed to suppress such an event (crbug.com/574959) | 780 // This check is needed to suppress such an event (crbug.com/574959) |
| 781 if (mouseEvent.button() == NoButton) | 781 if (mouseEvent.pointerProperties().button == WebPointerProperties::Button::N
oButton) |
| 782 return WebInputEventResult::HandledSuppressed; | 782 return WebInputEventResult::HandledSuppressed; |
| 783 | 783 |
| 784 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | 784 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); |
| 785 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken =
UserGestureIndicator::currentToken(); | 785 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken =
UserGestureIndicator::currentToken(); |
| 786 | 786 |
| 787 cancelFakeMouseMoveEvent(); | 787 cancelFakeMouseMoveEvent(); |
| 788 if (m_eventHandlerWillResetCapturingMouseEventsNode) | 788 if (m_eventHandlerWillResetCapturingMouseEventsNode) |
| 789 m_capturingMouseEventsNode = nullptr; | 789 m_capturingMouseEventsNode = nullptr; |
| 790 m_mousePressed = true; | 790 m_mousePressed = true; |
| 791 m_capturesDragging = true; | 791 m_capturesDragging = true; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Ac
tive); | 893 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Ac
tive); |
| 894 mev = m_frame->document()->prepareMouseEvent(request, documentPoint,
mouseEvent); | 894 mev = m_frame->document()->prepareMouseEvent(request, documentPoint,
mouseEvent); |
| 895 } | 895 } |
| 896 | 896 |
| 897 if (passMousePressEventToScrollbar(mev)) | 897 if (passMousePressEventToScrollbar(mev)) |
| 898 eventResult = WebInputEventResult::HandledSystem; | 898 eventResult = WebInputEventResult::HandledSystem; |
| 899 else | 899 else |
| 900 eventResult = handleMousePressEvent(mev); | 900 eventResult = handleMousePressEvent(mev); |
| 901 } | 901 } |
| 902 | 902 |
| 903 if (mev.hitTestResult().innerNode() && mouseEvent.button() == LeftButton) { | 903 if (mev.hitTestResult().innerNode() && mouseEvent.pointerProperties().button
== WebPointerProperties::Button::Left) { |
| 904 ASSERT(mouseEvent.type() == PlatformEvent::MousePressed); | 904 ASSERT(mouseEvent.type() == PlatformEvent::MousePressed); |
| 905 HitTestResult result = mev.hitTestResult(); | 905 HitTestResult result = mev.hitTestResult(); |
| 906 result.setToShadowHostIfInUserAgentShadowRoot(); | 906 result.setToShadowHostIfInUserAgentShadowRoot(); |
| 907 m_frame->chromeClient().onMouseDown(result.innerNode()); | 907 m_frame->chromeClient().onMouseDown(result.innerNode()); |
| 908 } | 908 } |
| 909 | 909 |
| 910 return eventResult; | 910 return eventResult; |
| 911 } | 911 } |
| 912 | 912 |
| 913 static PaintLayer* layerForNode(Node* node) | 913 static PaintLayer* layerForNode(Node* node) |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1093 return FlatTreeTraversal::parent(node); | 1093 return FlatTreeTraversal::parent(node); |
| 1094 } | 1094 } |
| 1095 | 1095 |
| 1096 WebInputEventResult EventHandler::handleMouseReleaseEvent(const PlatformMouseEve
nt& mouseEvent) | 1096 WebInputEventResult EventHandler::handleMouseReleaseEvent(const PlatformMouseEve
nt& mouseEvent) |
| 1097 { | 1097 { |
| 1098 TRACE_EVENT0("blink", "EventHandler::handleMouseReleaseEvent"); | 1098 TRACE_EVENT0("blink", "EventHandler::handleMouseReleaseEvent"); |
| 1099 | 1099 |
| 1100 // For 4th/5th button in the mouse since Chrome does not yet send | 1100 // For 4th/5th button in the mouse since Chrome does not yet send |
| 1101 // button value to Blink but in some cases it does send the event. | 1101 // button value to Blink but in some cases it does send the event. |
| 1102 // This check is needed to suppress such an event (crbug.com/574959) | 1102 // This check is needed to suppress such an event (crbug.com/574959) |
| 1103 if (mouseEvent.button() == NoButton) | 1103 if (mouseEvent.pointerProperties().button == WebPointerProperties::Button::N
oButton) |
| 1104 return WebInputEventResult::HandledSuppressed; | 1104 return WebInputEventResult::HandledSuppressed; |
| 1105 | 1105 |
| 1106 if (!mouseEvent.fromTouch()) | 1106 if (!mouseEvent.fromTouch()) |
| 1107 m_frame->selection().setCaretBlinkingSuspended(false); | 1107 m_frame->selection().setCaretBlinkingSuspended(false); |
| 1108 | 1108 |
| 1109 std::unique_ptr<UserGestureIndicator> gestureIndicator; | 1109 std::unique_ptr<UserGestureIndicator> gestureIndicator; |
| 1110 | 1110 |
| 1111 if (m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToke
n) | 1111 if (m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToke
n) |
| 1112 gestureIndicator = wrapUnique(new UserGestureIndicator(m_frame->localFra
meRoot()->eventHandler().m_lastMouseDownUserGestureToken.release())); | 1112 gestureIndicator = wrapUnique(new UserGestureIndicator(m_frame->localFra
meRoot()->eventHandler().m_lastMouseDownUserGestureToken.release())); |
| 1113 else | 1113 else |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1145 LocalFrame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetN
ode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); | 1145 LocalFrame* subframe = m_capturingMouseEventsNode.get() ? subframeForTargetN
ode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); |
| 1146 if (m_eventHandlerWillResetCapturingMouseEventsNode) | 1146 if (m_eventHandlerWillResetCapturingMouseEventsNode) |
| 1147 m_capturingMouseEventsNode = nullptr; | 1147 m_capturingMouseEventsNode = nullptr; |
| 1148 if (subframe) | 1148 if (subframe) |
| 1149 return passMouseReleaseEventToSubframe(mev, subframe); | 1149 return passMouseReleaseEventToSubframe(mev, subframe); |
| 1150 | 1150 |
| 1151 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mouseup, mev.innerNode(), m_clickCount, mev.event()); | 1151 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mouseup, mev.innerNode(), m_clickCount, mev.event()); |
| 1152 | 1152 |
| 1153 // We only prevent click event when the click may cause contextmenu to popup
. | 1153 // We only prevent click event when the click may cause contextmenu to popup
. |
| 1154 // However, we always send auxclick. | 1154 // However, we always send auxclick. |
| 1155 bool contextMenuEvent = !RuntimeEnabledFeatures::auxclickEnabled() && mouseE
vent.button() == RightButton; | 1155 bool contextMenuEvent = !RuntimeEnabledFeatures::auxclickEnabled() |
| 1156 && mouseEvent.pointerProperties().button == WebPointerProperties::Button
::Right; |
| 1156 #if OS(MACOSX) | 1157 #if OS(MACOSX) |
| 1157 // 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. | 1158 // 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. |
| 1158 if (mouseEvent.button() == LeftButton && mouseEvent.getModifiers() & Platfor
mEvent::CtrlKey) | 1159 if (mouseEvent.pointerProperties().button == WebPointerProperties::Button::L
eft |
| 1160 && mouseEvent.getModifiers() & PlatformEvent::CtrlKey) |
| 1159 contextMenuEvent = true; | 1161 contextMenuEvent = true; |
| 1160 #endif | 1162 #endif |
| 1161 | 1163 |
| 1162 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; | 1164 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; |
| 1163 const bool shouldDispatchClickEvent = m_clickCount > 0 | 1165 const bool shouldDispatchClickEvent = m_clickCount > 0 |
| 1164 && !contextMenuEvent | 1166 && !contextMenuEvent |
| 1165 && mev.innerNode() && m_clickNode | 1167 && mev.innerNode() && m_clickNode |
| 1166 && mev.innerNode()->canParticipateInFlatTree() && m_clickNode->canPartic
ipateInFlatTree() | 1168 && mev.innerNode()->canParticipateInFlatTree() && m_clickNode->canPartic
ipateInFlatTree() |
| 1167 && !(selectionController().hasExtendedSelection() && isLinkSelection(mev
)); | 1169 && !(selectionController().hasExtendedSelection() && isLinkSelection(mev
)); |
| 1168 if (shouldDispatchClickEvent) { | 1170 if (shouldDispatchClickEvent) { |
| 1169 Node* clickTargetNode = nullptr; | 1171 Node* clickTargetNode = nullptr; |
| 1170 // Updates distribution because a 'mouseup' event listener can make the | 1172 // Updates distribution because a 'mouseup' event listener can make the |
| 1171 // tree dirty at dispatchMouseEvent() invocation above. | 1173 // tree dirty at dispatchMouseEvent() invocation above. |
| 1172 // Unless distribution is updated, commonAncestor would hit ASSERT. | 1174 // Unless distribution is updated, commonAncestor would hit ASSERT. |
| 1173 if (m_clickNode == mev.innerNode()) { | 1175 if (m_clickNode == mev.innerNode()) { |
| 1174 clickTargetNode = m_clickNode; | 1176 clickTargetNode = m_clickNode; |
| 1175 clickTargetNode->updateDistribution(); | 1177 clickTargetNode->updateDistribution(); |
| 1176 } else if (m_clickNode->document() == mev.innerNode()->document()) { | 1178 } else if (m_clickNode->document() == mev.innerNode()->document()) { |
| 1177 m_clickNode->updateDistribution(); | 1179 m_clickNode->updateDistribution(); |
| 1178 mev.innerNode()->updateDistribution(); | 1180 mev.innerNode()->updateDistribution(); |
| 1179 clickTargetNode = mev.innerNode()->commonAncestor( | 1181 clickTargetNode = mev.innerNode()->commonAncestor( |
| 1180 *m_clickNode, parentForClickEvent); | 1182 *m_clickNode, parentForClickEvent); |
| 1181 } | 1183 } |
| 1182 if (clickTargetNode) { | 1184 if (clickTargetNode) { |
| 1183 // Dispatch mouseup directly w/o calling updateMouseEventTargetNodeA
ndSendEvents | 1185 // Dispatch mouseup directly w/o calling updateMouseEventTargetNodeA
ndSendEvents |
| 1184 // because the mouseup dispatch above has already updated it | 1186 // because the mouseup dispatch above has already updated it |
| 1185 // correctly. Moreover, clickTargetNode is different from | 1187 // correctly. Moreover, clickTargetNode is different from |
| 1186 // mev.innerNode at drag-release. | 1188 // mev.innerNode at drag-release. |
| 1187 clickEventResult = toWebInputEventResult(clickTargetNode->dispatchMo
useEvent(mev.event(), | 1189 clickEventResult = toWebInputEventResult(clickTargetNode->dispatchMo
useEvent(mev.event(), |
| 1188 !RuntimeEnabledFeatures::auxclickEnabled() || (mev.event().butto
n() == MouseButton::LeftButton) | 1190 !RuntimeEnabledFeatures::auxclickEnabled() |
| 1191 || (mev.event().pointerProperties().button == WebPointerProperti
es::Button::Left) |
| 1189 ? EventTypeNames::click | 1192 ? EventTypeNames::click |
| 1190 : EventTypeNames::auxclick, | 1193 : EventTypeNames::auxclick, |
| 1191 m_clickCount)); | 1194 m_clickCount)); |
| 1192 } | 1195 } |
| 1193 } | 1196 } |
| 1194 | 1197 |
| 1195 m_scrollManager.clearResizeScrollableArea(false); | 1198 m_scrollManager.clearResizeScrollableArea(false); |
| 1196 | 1199 |
| 1197 if (eventResult == WebInputEventResult::NotHandled) | 1200 if (eventResult == WebInputEventResult::NotHandled) |
| 1198 eventResult = handleMouseReleaseEvent(mev); | 1201 eventResult = handleMouseReleaseEvent(mev); |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1513 || mouseEventType == EventTypeNames::mousemove | 1516 || mouseEventType == EventTypeNames::mousemove |
| 1514 || mouseEventType == EventTypeNames::mouseup); | 1517 || mouseEventType == EventTypeNames::mouseup); |
| 1515 | 1518 |
| 1516 Node* lastNodeUnderMouse = updateMouseEventTargetNode(targetNode, mouseEvent
); | 1519 Node* lastNodeUnderMouse = updateMouseEventTargetNode(targetNode, mouseEvent
); |
| 1517 | 1520 |
| 1518 if (mouseEvent.getSyntheticEventType() == PlatformMouseEvent::FromTouch) | 1521 if (mouseEvent.getSyntheticEventType() == PlatformMouseEvent::FromTouch) |
| 1519 return dispatchMouseEvent(mouseEventType, m_nodeUnderMouse, clickCount,
mouseEvent); | 1522 return dispatchMouseEvent(mouseEventType, m_nodeUnderMouse, clickCount,
mouseEvent); |
| 1520 | 1523 |
| 1521 Node* newNodeUnderMouse = nullptr; | 1524 Node* newNodeUnderMouse = nullptr; |
| 1522 const auto& eventResult = m_pointerEventManager.sendMousePointerEvent( | 1525 const auto& eventResult = m_pointerEventManager.sendMousePointerEvent( |
| 1523 m_nodeUnderMouse, mouseEventType, clickCount, mouseEvent, nullptr, | 1526 m_nodeUnderMouse, mouseEventType, clickCount, mouseEvent, |
| 1524 lastNodeUnderMouse, &newNodeUnderMouse); | 1527 lastNodeUnderMouse, &newNodeUnderMouse); |
| 1525 m_nodeUnderMouse = newNodeUnderMouse; | 1528 m_nodeUnderMouse = newNodeUnderMouse; |
| 1526 return eventResult; | 1529 return eventResult; |
| 1527 } | 1530 } |
| 1528 | 1531 |
| 1529 void EventHandler::setClickNode(Node* node) | 1532 void EventHandler::setClickNode(Node* node) |
| 1530 { | 1533 { |
| 1531 m_clickNode = node; | 1534 m_clickNode = node; |
| 1532 } | 1535 } |
| 1533 | 1536 |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1891 exitedFrameChain.append(exitedFrameInDocument); | 1894 exitedFrameChain.append(exitedFrameInDocument); |
| 1892 else if (nextExitedFrameInDocument && indexEnteredFrameChain) | 1895 else if (nextExitedFrameInDocument && indexEnteredFrameChain) |
| 1893 --indexEnteredFrameChain; | 1896 --indexEnteredFrameChain; |
| 1894 } | 1897 } |
| 1895 exitedFrameInDocument = nextExitedFrameInDocument; | 1898 exitedFrameInDocument = nextExitedFrameInDocument; |
| 1896 } | 1899 } |
| 1897 | 1900 |
| 1898 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); | 1901 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); |
| 1899 unsigned modifiers = gestureEvent.getModifiers(); | 1902 unsigned modifiers = gestureEvent.getModifiers(); |
| 1900 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa
lPosition(), | 1903 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa
lPosition(), |
| 1901 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, | 1904 WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, /* cl
ickCount */ 0, |
| 1902 static_cast<PlatformEvent::Modifiers>(modifiers), | 1905 static_cast<PlatformEvent::Modifiers>(modifiers), |
| 1903 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerPrope
rties::PointerType::Mouse); | 1906 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerPrope
rties::PointerType::Mouse); |
| 1904 | 1907 |
| 1905 // Update the mouseout/mouseleave event | 1908 // Update the mouseout/mouseleave event |
| 1906 size_t indexExitedFrameChain = exitedFrameChain.size(); | 1909 size_t indexExitedFrameChain = exitedFrameChain.size(); |
| 1907 while (indexExitedFrameChain) { | 1910 while (indexExitedFrameChain) { |
| 1908 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain]; | 1911 LocalFrame* leaveFrame = exitedFrameChain[--indexExitedFrameChain]; |
| 1909 leaveFrame->eventHandler().updateMouseEventTargetNodeAndSendEvents(nullp
tr, fakeMouseMove); | 1912 leaveFrame->eventHandler().updateMouseEventTargetNodeAndSendEvents(nullp
tr, fakeMouseMove); |
| 1910 } | 1913 } |
| 1911 | 1914 |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2099 result.setInnerNode(targetNode); | 2102 result.setInnerNode(targetNode); |
| 2100 doc->updateHoverActiveState(request, result.innerElement()); | 2103 doc->updateHoverActiveState(request, result.innerElement()); |
| 2101 | 2104 |
| 2102 // The contextmenu event is a mouse event even when invoked using the keyboa
rd. | 2105 // The contextmenu event is a mouse event even when invoked using the keyboa
rd. |
| 2103 // This is required for web compatibility. | 2106 // This is required for web compatibility. |
| 2104 PlatformEvent::EventType eventType = PlatformEvent::MousePressed; | 2107 PlatformEvent::EventType eventType = PlatformEvent::MousePressed; |
| 2105 if (m_frame->settings() && m_frame->settings()->showContextMenuOnMouseUp()) | 2108 if (m_frame->settings() && m_frame->settings()->showContextMenuOnMouseUp()) |
| 2106 eventType = PlatformEvent::MouseReleased; | 2109 eventType = PlatformEvent::MouseReleased; |
| 2107 | 2110 |
| 2108 PlatformMouseEvent mouseEvent(locationInRootFrame, globalPosition, | 2111 PlatformMouseEvent mouseEvent(locationInRootFrame, globalPosition, |
| 2109 RightButton, eventType, 1, | 2112 WebPointerProperties::Button::Right, eventType, 1, |
| 2110 PlatformEvent::NoModifiers, PlatformMouseEvent::RealOrIndistinguishable, | 2113 PlatformEvent::NoModifiers, PlatformMouseEvent::RealOrIndistinguishable, |
| 2111 WTF::monotonicallyIncreasingTime(), WebPointerProperties::PointerType::M
ouse); | 2114 WTF::monotonicallyIncreasingTime(), WebPointerProperties::PointerType::M
ouse); |
| 2112 | 2115 |
| 2113 return sendContextMenuEvent(mouseEvent, overrideTargetElement); | 2116 return sendContextMenuEvent(mouseEvent, overrideTargetElement); |
| 2114 } | 2117 } |
| 2115 | 2118 |
| 2116 void EventHandler::scheduleHoverStateUpdate() | 2119 void EventHandler::scheduleHoverStateUpdate() |
| 2117 { | 2120 { |
| 2118 if (!m_hoverTimer.isActive()) | 2121 if (!m_hoverTimer.isActive()) |
| 2119 m_hoverTimer.startOneShot(0, BLINK_FROM_HERE); | 2122 m_hoverTimer.startOneShot(0, BLINK_FROM_HERE); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2179 if (!view) | 2182 if (!view) |
| 2180 return; | 2183 return; |
| 2181 | 2184 |
| 2182 if (!m_frame->page() || !m_frame->page()->focusController().isActive()) | 2185 if (!m_frame->page() || !m_frame->page()->focusController().isActive()) |
| 2183 return; | 2186 return; |
| 2184 | 2187 |
| 2185 // Don't dispatch a synthetic mouse move event if the mouse cursor is not vi
sible to the user. | 2188 // Don't dispatch a synthetic mouse move event if the mouse cursor is not vi
sible to the user. |
| 2186 if (!isCursorVisible()) | 2189 if (!isCursorVisible()) |
| 2187 return; | 2190 return; |
| 2188 | 2191 |
| 2189 PlatformMouseEvent fakeMouseMoveEvent(m_lastKnownMousePosition, m_lastKnownM
ouseGlobalPosition, NoButton, PlatformEvent::MouseMoved, 0, PlatformKeyboardEven
t::getCurrentModifierState(), PlatformMouseEvent::RealOrIndistinguishable, monot
onicallyIncreasingTime(), WebPointerProperties::PointerType::Mouse); | 2192 PlatformMouseEvent fakeMouseMoveEvent(m_lastKnownMousePosition, m_lastKnownM
ouseGlobalPosition, WebPointerProperties::Button::NoButton, PlatformEvent::Mouse
Moved, 0, PlatformKeyboardEvent::getCurrentModifierState(), PlatformMouseEvent::
RealOrIndistinguishable, monotonicallyIncreasingTime(), WebPointerProperties::Po
interType::Mouse); |
| 2190 handleMouseMoveEvent(fakeMouseMoveEvent); | 2193 handleMouseMoveEvent(fakeMouseMoveEvent); |
| 2191 } | 2194 } |
| 2192 | 2195 |
| 2193 void EventHandler::cancelFakeMouseMoveEvent() | 2196 void EventHandler::cancelFakeMouseMoveEvent() |
| 2194 { | 2197 { |
| 2195 m_fakeMouseMoveEventTimer.stop(); | 2198 m_fakeMouseMoveEventTimer.stop(); |
| 2196 } | 2199 } |
| 2197 | 2200 |
| 2198 bool EventHandler::isCursorVisible() const | 2201 bool EventHandler::isCursorVisible() const |
| 2199 { | 2202 { |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2336 | 2339 |
| 2337 bool EventHandler::handleDragDropIfPossible(const GestureEventWithHitTestResults
& targetedEvent) | 2340 bool EventHandler::handleDragDropIfPossible(const GestureEventWithHitTestResults
& targetedEvent) |
| 2338 { | 2341 { |
| 2339 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_
frame->view()) { | 2342 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_
frame->view()) { |
| 2340 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); | 2343 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); |
| 2341 IntPoint adjustedPoint = gestureEvent.position(); | 2344 IntPoint adjustedPoint = gestureEvent.position(); |
| 2342 unsigned modifiers = gestureEvent.getModifiers(); | 2345 unsigned modifiers = gestureEvent.getModifiers(); |
| 2343 | 2346 |
| 2344 // TODO(mustaq): Suppressing long-tap MouseEvents could break | 2347 // TODO(mustaq): Suppressing long-tap MouseEvents could break |
| 2345 // drag-drop. Will do separately because of the risk. crbug.com/606938. | 2348 // drag-drop. Will do separately because of the risk. crbug.com/606938. |
| 2346 PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MousePressed, 1, | 2349 PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi
tion(), WebPointerProperties::Button::Left, PlatformEvent::MousePressed, 1, |
| 2347 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef
tButtonDown), | 2350 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef
tButtonDown), |
| 2348 PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), W
ebPointerProperties::PointerType::Mouse); | 2351 PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), W
ebPointerProperties::PointerType::Mouse); |
| 2349 m_mouseDown = mouseDownEvent; | 2352 m_mouseDown = mouseDownEvent; |
| 2350 | 2353 |
| 2351 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MouseMoved, 1, | 2354 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), WebPointerProperties::Button::Left, PlatformEvent::MouseMoved, 1, |
| 2352 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef
tButtonDown), | 2355 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef
tButtonDown), |
| 2353 PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), W
ebPointerProperties::PointerType::Mouse); | 2356 PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), W
ebPointerProperties::PointerType::Mouse); |
| 2354 HitTestRequest request(HitTestRequest::ReadOnly); | 2357 HitTestRequest request(HitTestRequest::ReadOnly); |
| 2355 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); | 2358 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); |
| 2356 m_mouseDownMayStartDrag = true; | 2359 m_mouseDownMayStartDrag = true; |
| 2357 dragState().m_dragSrc = nullptr; | 2360 dragState().m_dragSrc = nullptr; |
| 2358 m_mouseDownPos = m_frame->view()->rootFrameToContents(mouseDragEvent.pos
ition()); | 2361 m_mouseDownPos = m_frame->view()->rootFrameToContents(mouseDragEvent.pos
ition()); |
| 2359 return handleDrag(mev, DragInitiator::Touch); | 2362 return handleDrag(mev, DragInitiator::Touch); |
| 2360 } | 2363 } |
| 2361 return false; | 2364 return false; |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2597 | 2600 |
| 2598 FrameHost* EventHandler::frameHost() const | 2601 FrameHost* EventHandler::frameHost() const |
| 2599 { | 2602 { |
| 2600 if (!m_frame->page()) | 2603 if (!m_frame->page()) |
| 2601 return nullptr; | 2604 return nullptr; |
| 2602 | 2605 |
| 2603 return &m_frame->page()->frameHost(); | 2606 return &m_frame->page()->frameHost(); |
| 2604 } | 2607 } |
| 2605 | 2608 |
| 2606 } // namespace blink | 2609 } // namespace blink |
| OLD | NEW |