| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 #include "core/editing/htmlediting.h" | 45 #include "core/editing/htmlediting.h" |
| 46 #include "core/events/DOMWindowEventQueue.h" | 46 #include "core/events/DOMWindowEventQueue.h" |
| 47 #include "core/events/EventPath.h" | 47 #include "core/events/EventPath.h" |
| 48 #include "core/events/KeyboardEvent.h" | 48 #include "core/events/KeyboardEvent.h" |
| 49 #include "core/events/MouseEvent.h" | 49 #include "core/events/MouseEvent.h" |
| 50 #include "core/events/TextEvent.h" | 50 #include "core/events/TextEvent.h" |
| 51 #include "core/events/TouchEvent.h" | 51 #include "core/events/TouchEvent.h" |
| 52 #include "core/events/WheelEvent.h" | 52 #include "core/events/WheelEvent.h" |
| 53 #include "core/fetch/ImageResource.h" | 53 #include "core/fetch/ImageResource.h" |
| 54 #include "core/frame/EventHandlerRegistry.h" | 54 #include "core/frame/EventHandlerRegistry.h" |
| 55 #include "core/frame/FrameProtector.h" |
| 55 #include "core/frame/FrameView.h" | 56 #include "core/frame/FrameView.h" |
| 56 #include "core/frame/LocalFrame.h" | 57 #include "core/frame/LocalFrame.h" |
| 57 #include "core/frame/Settings.h" | 58 #include "core/frame/Settings.h" |
| 58 #include "core/html/HTMLDialogElement.h" | 59 #include "core/html/HTMLDialogElement.h" |
| 59 #include "core/html/HTMLFrameElementBase.h" | 60 #include "core/html/HTMLFrameElementBase.h" |
| 60 #include "core/html/HTMLFrameSetElement.h" | 61 #include "core/html/HTMLFrameSetElement.h" |
| 61 #include "core/html/HTMLInputElement.h" | 62 #include "core/html/HTMLInputElement.h" |
| 62 #include "core/inspector/InspectorController.h" | 63 #include "core/inspector/InspectorController.h" |
| 63 #include "core/loader/FrameLoader.h" | 64 #include "core/loader/FrameLoader.h" |
| 64 #include "core/loader/FrameLoaderClient.h" | 65 #include "core/loader/FrameLoaderClient.h" |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 ASSERT(!m_fakeMouseMoveEventTimer.isActive()); | 237 ASSERT(!m_fakeMouseMoveEventTimer.isActive()); |
| 237 } | 238 } |
| 238 | 239 |
| 239 void EventHandler::trace(Visitor* visitor) | 240 void EventHandler::trace(Visitor* visitor) |
| 240 { | 241 { |
| 241 #if ENABLE(OILPAN) | 242 #if ENABLE(OILPAN) |
| 242 visitor->trace(m_mousePressNode); | 243 visitor->trace(m_mousePressNode); |
| 243 visitor->trace(m_capturingMouseEventsNode); | 244 visitor->trace(m_capturingMouseEventsNode); |
| 244 visitor->trace(m_nodeUnderMouse); | 245 visitor->trace(m_nodeUnderMouse); |
| 245 visitor->trace(m_lastNodeUnderMouse); | 246 visitor->trace(m_lastNodeUnderMouse); |
| 247 visitor->trace(m_lastMouseMoveEventSubframe); |
| 246 visitor->trace(m_clickNode); | 248 visitor->trace(m_clickNode); |
| 247 visitor->trace(m_dragTarget); | 249 visitor->trace(m_dragTarget); |
| 248 visitor->trace(m_frameSetBeingResized); | 250 visitor->trace(m_frameSetBeingResized); |
| 249 visitor->trace(m_latchedWheelEventNode); | 251 visitor->trace(m_latchedWheelEventNode); |
| 250 visitor->trace(m_previousWheelScrolledNode); | 252 visitor->trace(m_previousWheelScrolledNode); |
| 251 visitor->trace(m_targetForTouchID); | 253 visitor->trace(m_targetForTouchID); |
| 252 visitor->trace(m_touchSequenceDocument); | 254 visitor->trace(m_touchSequenceDocument); |
| 253 visitor->trace(m_scrollGestureHandlingNode); | 255 visitor->trace(m_scrollGestureHandlingNode); |
| 254 visitor->trace(m_previousGestureScrolledNode); | 256 visitor->trace(m_previousGestureScrolledNode); |
| 255 visitor->trace(m_lastDeferredTapElement); | 257 visitor->trace(m_lastDeferredTapElement); |
| (...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 FrameView* view = frame->view(); | 1197 FrameView* view = frame->view(); |
| 1196 // FIXME: Is it really OK to use the wrong coordinates here when view is 0? | 1198 // FIXME: Is it really OK to use the wrong coordinates here when view is 0? |
| 1197 // Historically the code would just crash; this is clearly no worse than tha
t. | 1199 // Historically the code would just crash; this is clearly no worse than tha
t. |
| 1198 return view ? view->windowToContents(windowPoint) : windowPoint; | 1200 return view ? view->windowToContents(windowPoint) : windowPoint; |
| 1199 } | 1201 } |
| 1200 | 1202 |
| 1201 bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) | 1203 bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) |
| 1202 { | 1204 { |
| 1203 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent"); | 1205 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent"); |
| 1204 | 1206 |
| 1205 RefPtr<FrameView> protector(m_frame->view()); | 1207 FrameViewProtector protector(m_frame->view()); |
| 1206 | 1208 |
| 1207 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | 1209 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); |
| 1208 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken =
gestureIndicator.currentToken(); | 1210 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken =
gestureIndicator.currentToken(); |
| 1209 | 1211 |
| 1210 cancelFakeMouseMoveEvent(); | 1212 cancelFakeMouseMoveEvent(); |
| 1211 if (m_eventHandlerWillResetCapturingMouseEventsNode) | 1213 if (m_eventHandlerWillResetCapturingMouseEventsNode) |
| 1212 m_capturingMouseEventsNode = nullptr; | 1214 m_capturingMouseEventsNode = nullptr; |
| 1213 m_mousePressed = true; | 1215 m_mousePressed = true; |
| 1214 m_capturesDragging = true; | 1216 m_capturesDragging = true; |
| 1215 setLastKnownMousePosition(mouseEvent); | 1217 setLastKnownMousePosition(mouseEvent); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1234 LayoutPoint documentPoint = documentPointForWindowPoint(m_frame, mouseEvent.
position()); | 1236 LayoutPoint documentPoint = documentPointForWindowPoint(m_frame, mouseEvent.
position()); |
| 1235 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re
quest, documentPoint, mouseEvent); | 1237 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re
quest, documentPoint, mouseEvent); |
| 1236 | 1238 |
| 1237 if (!mev.targetNode()) { | 1239 if (!mev.targetNode()) { |
| 1238 invalidateClick(); | 1240 invalidateClick(); |
| 1239 return false; | 1241 return false; |
| 1240 } | 1242 } |
| 1241 | 1243 |
| 1242 m_mousePressNode = mev.targetNode(); | 1244 m_mousePressNode = mev.targetNode(); |
| 1243 | 1245 |
| 1244 RefPtr<LocalFrame> subframe = subframeForHitTestResult(mev); | 1246 LocalFrame* subframe = subframeForHitTestResult(mev); |
| 1245 if (subframe && passMousePressEventToSubframe(mev, subframe.get())) { | 1247 FrameProtector protect(subframe); |
| 1248 if (subframe && passMousePressEventToSubframe(mev, subframe)) { |
| 1246 // Start capturing future events for this frame. We only do this if we
didn't clear | 1249 // Start capturing future events for this frame. We only do this if we
didn't clear |
| 1247 // the m_mousePressed flag, which may happen if an AppKit widget entered
a modal event loop. | 1250 // the m_mousePressed flag, which may happen if an AppKit widget entered
a modal event loop. |
| 1248 m_capturesDragging = subframe->eventHandler().capturesDragging(); | 1251 m_capturesDragging = subframe->eventHandler().capturesDragging(); |
| 1249 if (m_mousePressed && m_capturesDragging) { | 1252 if (m_mousePressed && m_capturesDragging) { |
| 1250 m_capturingMouseEventsNode = mev.targetNode(); | 1253 m_capturingMouseEventsNode = mev.targetNode(); |
| 1251 m_eventHandlerWillResetCapturingMouseEventsNode = true; | 1254 m_eventHandlerWillResetCapturingMouseEventsNode = true; |
| 1252 } | 1255 } |
| 1253 invalidateClick(); | 1256 invalidateClick(); |
| 1254 return true; | 1257 return true; |
| 1255 } | 1258 } |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1339 return scrollableArea; | 1342 return scrollableArea; |
| 1340 } | 1343 } |
| 1341 | 1344 |
| 1342 return 0; | 1345 return 0; |
| 1343 } | 1346 } |
| 1344 | 1347 |
| 1345 bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& event) | 1348 bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& event) |
| 1346 { | 1349 { |
| 1347 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); | 1350 TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent"); |
| 1348 | 1351 |
| 1349 RefPtr<FrameView> protector(m_frame->view()); | 1352 FrameViewProtector protector(m_frame->view()); |
| 1350 MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration); | 1353 MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration); |
| 1351 | 1354 |
| 1352 HitTestResult hoveredNode = HitTestResult(LayoutPoint()); | 1355 HitTestResult hoveredNode = HitTestResult(LayoutPoint()); |
| 1353 bool result = handleMouseMoveOrLeaveEvent(event, &hoveredNode); | 1356 bool result = handleMouseMoveOrLeaveEvent(event, &hoveredNode); |
| 1354 | 1357 |
| 1355 Page* page = m_frame->page(); | 1358 Page* page = m_frame->page(); |
| 1356 if (!page) | 1359 if (!page) |
| 1357 return result; | 1360 return result; |
| 1358 | 1361 |
| 1359 if (RenderLayer* layer = layerForNode(hoveredNode.innerNode())) { | 1362 if (RenderLayer* layer = layerForNode(hoveredNode.innerNode())) { |
| 1360 if (ScrollableArea* layerScrollableArea = associatedScrollableArea(layer
)) | 1363 if (ScrollableArea* layerScrollableArea = associatedScrollableArea(layer
)) |
| 1361 layerScrollableArea->mouseMovedInContentArea(); | 1364 layerScrollableArea->mouseMovedInContentArea(); |
| 1362 } | 1365 } |
| 1363 | 1366 |
| 1364 if (FrameView* frameView = m_frame->view()) | 1367 if (FrameView* frameView = m_frame->view()) |
| 1365 frameView->mouseMovedInContentArea(); | 1368 frameView->mouseMovedInContentArea(); |
| 1366 | 1369 |
| 1367 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); | 1370 hoveredNode.setToShadowHostIfInUserAgentShadowRoot(); |
| 1368 page->chrome().mouseDidMoveOverElement(hoveredNode, event.modifierFlags()); | 1371 page->chrome().mouseDidMoveOverElement(hoveredNode, event.modifierFlags()); |
| 1369 page->chrome().setToolTip(hoveredNode); | 1372 page->chrome().setToolTip(hoveredNode); |
| 1370 | 1373 |
| 1371 return result; | 1374 return result; |
| 1372 } | 1375 } |
| 1373 | 1376 |
| 1374 void EventHandler::handleMouseLeaveEvent(const PlatformMouseEvent& event) | 1377 void EventHandler::handleMouseLeaveEvent(const PlatformMouseEvent& event) |
| 1375 { | 1378 { |
| 1376 TRACE_EVENT0("blink", "EventHandler::handleMouseLeaveEvent"); | 1379 TRACE_EVENT0("blink", "EventHandler::handleMouseLeaveEvent"); |
| 1377 | 1380 |
| 1378 RefPtr<FrameView> protector(m_frame->view()); | 1381 FrameViewProtector protector(m_frame->view()); |
| 1379 handleMouseMoveOrLeaveEvent(event); | 1382 handleMouseMoveOrLeaveEvent(event); |
| 1380 } | 1383 } |
| 1381 | 1384 |
| 1382 bool EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMouseEvent& mouseEv
ent, HitTestResult* hoveredNode, bool onlyUpdateScrollbars) | 1385 bool EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMouseEvent& mouseEv
ent, HitTestResult* hoveredNode, bool onlyUpdateScrollbars) |
| 1383 { | 1386 { |
| 1384 ASSERT(m_frame); | 1387 ASSERT(m_frame); |
| 1385 ASSERT(m_frame->view()); | 1388 ASSERT(m_frame->view()); |
| 1386 | 1389 |
| 1387 setLastKnownMousePosition(mouseEvent); | 1390 setLastKnownMousePosition(mouseEvent); |
| 1388 | 1391 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1439 | 1442 |
| 1440 if (!scrollbar) | 1443 if (!scrollbar) |
| 1441 scrollbar = mev.scrollbar(); | 1444 scrollbar = mev.scrollbar(); |
| 1442 | 1445 |
| 1443 updateLastScrollbarUnderMouse(scrollbar, !m_mousePressed); | 1446 updateLastScrollbarUnderMouse(scrollbar, !m_mousePressed); |
| 1444 if (onlyUpdateScrollbars) | 1447 if (onlyUpdateScrollbars) |
| 1445 return true; | 1448 return true; |
| 1446 } | 1449 } |
| 1447 | 1450 |
| 1448 bool swallowEvent = false; | 1451 bool swallowEvent = false; |
| 1449 RefPtr<LocalFrame> newSubframe = m_capturingMouseEventsNode.get() ? subframe
ForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); | 1452 LocalFrame* newSubframe = m_capturingMouseEventsNode.get() ? subframeForTarg
etNode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); |
| 1453 FrameProtector protect(newSubframe); |
| 1450 | 1454 |
| 1451 // 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. | 1455 // 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. |
| 1452 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree().isD
escendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) | 1456 if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree().isD
escendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) |
| 1453 passMouseMoveEventToSubframe(mev, m_lastMouseMoveEventSubframe.get()); | 1457 passMouseMoveEventToSubframe(mev, m_lastMouseMoveEventSubframe.get()); |
| 1454 | 1458 |
| 1455 if (newSubframe) { | 1459 if (newSubframe) { |
| 1456 // Update over/out state before passing the event to the subframe. | 1460 // Update over/out state before passing the event to the subframe. |
| 1457 updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); | 1461 updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); |
| 1458 | 1462 |
| 1459 // Event dispatch in updateMouseEventTargetNode may have caused the subf
rame of the target | 1463 // Event dispatch in updateMouseEventTargetNode may have caused the subf
rame of the target |
| 1460 // node to be detached from its FrameView, in which case the event shoul
d not be passed. | 1464 // node to be detached from its FrameView, in which case the event shoul
d not be passed. |
| 1461 if (newSubframe->view()) | 1465 if (newSubframe->view()) |
| 1462 swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe.get(),
hoveredNode); | 1466 swallowEvent |= passMouseMoveEventToSubframe(mev, newSubframe, hover
edNode); |
| 1463 } else { | 1467 } else { |
| 1464 if (scrollbar && !m_mousePressed) | 1468 if (scrollbar && !m_mousePressed) |
| 1465 scrollbar->mouseMoved(mouseEvent); // Handle hover effects on platfo
rms that support visual feedback on scrollbar hovering. | 1469 scrollbar->mouseMoved(mouseEvent); // Handle hover effects on platfo
rms that support visual feedback on scrollbar hovering. |
| 1466 if (FrameView* view = m_frame->view()) { | 1470 if (FrameView* view = m_frame->view()) { |
| 1467 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult()); | 1471 OptionalCursor optionalCursor = selectCursor(mev.hitTestResult()); |
| 1468 if (optionalCursor.isCursorChange()) { | 1472 if (optionalCursor.isCursorChange()) { |
| 1469 m_currentMouseCursor = optionalCursor.cursor(); | 1473 m_currentMouseCursor = optionalCursor.cursor(); |
| 1470 view->setCursor(m_currentMouseCursor); | 1474 view->setCursor(m_currentMouseCursor); |
| 1471 } | 1475 } |
| 1472 } | 1476 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1496 // controls. | 1500 // controls. |
| 1497 if (node.isHTMLElement() && toHTMLElement(node).isInteractiveContent()) | 1501 if (node.isHTMLElement() && toHTMLElement(node).isInteractiveContent()) |
| 1498 return 0; | 1502 return 0; |
| 1499 return NodeRenderingTraversal::parent(&node); | 1503 return NodeRenderingTraversal::parent(&node); |
| 1500 } | 1504 } |
| 1501 | 1505 |
| 1502 bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) | 1506 bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) |
| 1503 { | 1507 { |
| 1504 TRACE_EVENT0("blink", "EventHandler::handleMouseReleaseEvent"); | 1508 TRACE_EVENT0("blink", "EventHandler::handleMouseReleaseEvent"); |
| 1505 | 1509 |
| 1506 RefPtr<FrameView> protector(m_frame->view()); | 1510 FrameViewProtector protector(m_frame->view()); |
| 1507 | 1511 |
| 1508 m_frame->selection().setCaretBlinkingSuspended(false); | 1512 m_frame->selection().setCaretBlinkingSuspended(false); |
| 1509 | 1513 |
| 1510 OwnPtr<UserGestureIndicator> gestureIndicator; | 1514 OwnPtr<UserGestureIndicator> gestureIndicator; |
| 1511 | 1515 |
| 1512 if (m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToke
n) | 1516 if (m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToke
n) |
| 1513 gestureIndicator = adoptPtr(new UserGestureIndicator(m_frame->localFrame
Root()->eventHandler().m_lastMouseDownUserGestureToken.release())); | 1517 gestureIndicator = adoptPtr(new UserGestureIndicator(m_frame->localFrame
Root()->eventHandler().m_lastMouseDownUserGestureToken.release())); |
| 1514 else | 1518 else |
| 1515 gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessin
gUserGesture)); | 1519 gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessin
gUserGesture)); |
| 1516 | 1520 |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1950 { \ | 1954 { \ |
| 1951 setFrameWasScrolledByUser(); \ | 1955 setFrameWasScrolledByUser(); \ |
| 1952 return true; \ | 1956 return true; \ |
| 1953 } | 1957 } |
| 1954 | 1958 |
| 1955 Document* doc = m_frame->document(); | 1959 Document* doc = m_frame->document(); |
| 1956 | 1960 |
| 1957 if (!doc->renderView()) | 1961 if (!doc->renderView()) |
| 1958 return false; | 1962 return false; |
| 1959 | 1963 |
| 1960 RefPtr<FrameView> protector(m_frame->view()); | 1964 FrameViewProtector protector(m_frame->view()); |
| 1961 | 1965 |
| 1962 FrameView* view = m_frame->view(); | 1966 FrameView* view = m_frame->view(); |
| 1963 if (!view) | 1967 if (!view) |
| 1964 return false; | 1968 return false; |
| 1965 | 1969 |
| 1966 LayoutPoint vPoint = view->windowToContents(event.position()); | 1970 LayoutPoint vPoint = view->windowToContents(event.position()); |
| 1967 | 1971 |
| 1968 HitTestRequest request(HitTestRequest::ReadOnly); | 1972 HitTestRequest request(HitTestRequest::ReadOnly); |
| 1969 HitTestResult result(vPoint); | 1973 HitTestResult result(vPoint); |
| 1970 doc->renderView()->hitTest(request, result); | 1974 doc->renderView()->hitTest(request, result); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2075 if (gestureEvent.isScrollEvent()) | 2079 if (gestureEvent.isScrollEvent()) |
| 2076 return handleGestureScrollEvent(gestureEvent); | 2080 return handleGestureScrollEvent(gestureEvent); |
| 2077 | 2081 |
| 2078 // Non-scrolling related gesture events instead do a single cross-frame hit-
test and | 2082 // Non-scrolling related gesture events instead do a single cross-frame hit-
test and |
| 2079 // jump directly to the inner most frame. This matches handleMousePressEvent
etc. | 2083 // jump directly to the inner most frame. This matches handleMousePressEvent
etc. |
| 2080 | 2084 |
| 2081 // Hit test across all frames and do touch adjustment as necessary for the e
vent type. | 2085 // Hit test across all frames and do touch adjustment as necessary for the e
vent type. |
| 2082 GestureEventWithHitTestResults targetedEvent = targetGestureEvent(gestureEve
nt); | 2086 GestureEventWithHitTestResults targetedEvent = targetGestureEvent(gestureEve
nt); |
| 2083 | 2087 |
| 2084 // Route to the correct frame. | 2088 // Route to the correct frame. |
| 2085 if (LocalFrame* innerFrame = targetedEvent.hitTestResult().innerNodeFrame()) | 2089 if (LocalFrame* innerFrame = targetedEvent.hitTestResult().innerNodeFrame())
{ |
| 2086 return innerFrame->eventHandler().handleGestureEventInFrame(targetedEven
t); | 2090 return innerFrame->eventHandler().handleGestureEventInFrame(targetedEven
t); |
| 2091 } |
| 2087 | 2092 |
| 2088 // No hit test result, handle in root instance. Perhaps we should just retur
n false instead? | 2093 // No hit test result, handle in root instance. Perhaps we should just retur
n false instead? |
| 2089 return handleGestureEventInFrame(targetedEvent); | 2094 return handleGestureEventInFrame(targetedEvent); |
| 2090 } | 2095 } |
| 2091 | 2096 |
| 2092 bool EventHandler::handleGestureEventInFrame(const GestureEventWithHitTestResult
s& targetedEvent) | 2097 bool EventHandler::handleGestureEventInFrame(const GestureEventWithHitTestResult
s& targetedEvent) |
| 2093 { | 2098 { |
| 2094 ASSERT(!targetedEvent.event().isScrollEvent()); | 2099 ASSERT(!targetedEvent.event().isScrollEvent()); |
| 2095 | 2100 |
| 2096 RefPtrWillBeRawPtr<Node> eventTarget = targetedEvent.hitTestResult().targetN
ode(); | 2101 RefPtrWillBeRawPtr<Node> eventTarget = targetedEvent.hitTestResult().targetN
ode(); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2198 case PlatformEvent::GesturePinchUpdate: | 2203 case PlatformEvent::GesturePinchUpdate: |
| 2199 return false; | 2204 return false; |
| 2200 default: | 2205 default: |
| 2201 ASSERT_NOT_REACHED(); | 2206 ASSERT_NOT_REACHED(); |
| 2202 return false; | 2207 return false; |
| 2203 } | 2208 } |
| 2204 } | 2209 } |
| 2205 | 2210 |
| 2206 bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target
edEvent) | 2211 bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target
edEvent) |
| 2207 { | 2212 { |
| 2208 RefPtr<FrameView> protector(m_frame->view()); | 2213 FrameViewProtector protector(m_frame->view()); |
| 2214 |
| 2209 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); | 2215 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); |
| 2210 | 2216 |
| 2211 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | 2217 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); |
| 2212 | 2218 |
| 2213 unsigned modifierFlags = 0; | 2219 unsigned modifierFlags = 0; |
| 2214 if (gestureEvent.altKey()) | 2220 if (gestureEvent.altKey()) |
| 2215 modifierFlags |= PlatformEvent::AltKey; | 2221 modifierFlags |= PlatformEvent::AltKey; |
| 2216 if (gestureEvent.ctrlKey()) | 2222 if (gestureEvent.ctrlKey()) |
| 2217 modifierFlags |= PlatformEvent::CtrlKey; | 2223 modifierFlags |= PlatformEvent::CtrlKey; |
| 2218 if (gestureEvent.metaKey()) | 2224 if (gestureEvent.metaKey()) |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2291 m_mouseDown = mouseDownEvent; | 2297 m_mouseDown = mouseDownEvent; |
| 2292 | 2298 |
| 2293 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MouseMoved, 1, | 2299 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MouseMoved, 1, |
| 2294 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
(), gestureEvent.metaKey(), PlatformMouseEvent::RealOrIndistinguishable, WTF::cu
rrentTime()); | 2300 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
(), gestureEvent.metaKey(), PlatformMouseEvent::RealOrIndistinguishable, WTF::cu
rrentTime()); |
| 2295 HitTestRequest request(HitTestRequest::ReadOnly); | 2301 HitTestRequest request(HitTestRequest::ReadOnly); |
| 2296 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); | 2302 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); |
| 2297 m_didStartDrag = false; | 2303 m_didStartDrag = false; |
| 2298 m_mouseDownMayStartDrag = true; | 2304 m_mouseDownMayStartDrag = true; |
| 2299 dragState().m_dragSrc = nullptr; | 2305 dragState().m_dragSrc = nullptr; |
| 2300 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
on()); | 2306 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
on()); |
| 2301 RefPtr<FrameView> protector(m_frame->view()); | 2307 FrameViewProtector protector(m_frame->view()); |
| 2308 |
| 2302 handleDrag(mev, DontCheckDragHysteresis); | 2309 handleDrag(mev, DontCheckDragHysteresis); |
| 2303 if (m_didStartDrag) { | 2310 if (m_didStartDrag) { |
| 2304 m_longTapShouldInvokeContextMenu = true; | 2311 m_longTapShouldInvokeContextMenu = true; |
| 2305 return true; | 2312 return true; |
| 2306 } | 2313 } |
| 2307 } | 2314 } |
| 2308 #if OS(ANDROID) | 2315 #if OS(ANDROID) |
| 2309 bool shouldLongPressSelectWord = true; | 2316 bool shouldLongPressSelectWord = true; |
| 2310 #else | 2317 #else |
| 2311 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()-
>touchEditingEnabled(); | 2318 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()-
>touchEditingEnabled(); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2425 | 2432 |
| 2426 Node* node = m_scrollGestureHandlingNode.get(); | 2433 Node* node = m_scrollGestureHandlingNode.get(); |
| 2427 if (!node) | 2434 if (!node) |
| 2428 return sendScrollEventToView(gestureEvent, delta); | 2435 return sendScrollEventToView(gestureEvent, delta); |
| 2429 | 2436 |
| 2430 // Ignore this event if the targeted node does not have a valid renderer. | 2437 // Ignore this event if the targeted node does not have a valid renderer. |
| 2431 RenderObject* renderer = node->renderer(); | 2438 RenderObject* renderer = node->renderer(); |
| 2432 if (!renderer) | 2439 if (!renderer) |
| 2433 return false; | 2440 return false; |
| 2434 | 2441 |
| 2435 RefPtr<FrameView> protector(m_frame->view()); | 2442 FrameViewProtector protector(m_frame->view()); |
| 2436 | 2443 |
| 2437 Node* stopNode = 0; | 2444 Node* stopNode = 0; |
| 2438 bool scrollShouldNotPropagate = gestureEvent.type() == PlatformEvent::Gestur
eScrollUpdateWithoutPropagation; | 2445 bool scrollShouldNotPropagate = gestureEvent.type() == PlatformEvent::Gestur
eScrollUpdateWithoutPropagation; |
| 2439 | 2446 |
| 2440 // Try to send the event to the correct view. | 2447 // Try to send the event to the correct view. |
| 2441 if (passScrollGestureEventToWidget(gestureEvent, renderer)) { | 2448 if (passScrollGestureEventToWidget(gestureEvent, renderer)) { |
| 2442 if(scrollShouldNotPropagate) | 2449 if(scrollShouldNotPropagate) |
| 2443 m_previousGestureScrolledNode = m_scrollGestureHandlingNode; | 2450 m_previousGestureScrolledNode = m_scrollGestureHandlingNode; |
| 2444 | 2451 |
| 2445 return true; | 2452 return true; |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2982 | 2989 |
| 2983 int keyCode = keyEvent.windowsVirtualKeyCode(); | 2990 int keyCode = keyEvent.windowsVirtualKeyCode(); |
| 2984 return (keyCode >= VK_BACK && keyCode <= VK_CAPITAL) | 2991 return (keyCode >= VK_BACK && keyCode <= VK_CAPITAL) |
| 2985 || (keyCode >= VK_SPACE && keyCode <= VK_DELETE) | 2992 || (keyCode >= VK_SPACE && keyCode <= VK_DELETE) |
| 2986 || (keyCode >= VK_OEM_1 && keyCode <= VK_OEM_PLUS) | 2993 || (keyCode >= VK_OEM_1 && keyCode <= VK_OEM_PLUS) |
| 2987 || (keyCode >= VK_MULTIPLY && keyCode <= VK_OEM_8); | 2994 || (keyCode >= VK_MULTIPLY && keyCode <= VK_OEM_8); |
| 2988 } | 2995 } |
| 2989 | 2996 |
| 2990 bool EventHandler::keyEvent(const PlatformKeyboardEvent& initialKeyEvent) | 2997 bool EventHandler::keyEvent(const PlatformKeyboardEvent& initialKeyEvent) |
| 2991 { | 2998 { |
| 2992 RefPtr<FrameView> protector(m_frame->view()); | 2999 FrameViewProtector protector(m_frame->view()); |
| 2993 | 3000 |
| 2994 ASSERT(m_frame->document()); | 3001 ASSERT(m_frame->document()); |
| 2995 if (Fullscreen* fullscreen = Fullscreen::fromIfExists(*m_frame->document()))
{ | 3002 if (Fullscreen* fullscreen = Fullscreen::fromIfExists(*m_frame->document()))
{ |
| 2996 if (fullscreen->webkitCurrentFullScreenElement() && !isKeyEventAllowedIn
FullScreen(fullscreen, initialKeyEvent)) { | 3003 if (fullscreen->webkitCurrentFullScreenElement() && !isKeyEventAllowedIn
FullScreen(fullscreen, initialKeyEvent)) { |
| 2997 UseCounter::count(*m_frame->document(), UseCounter::KeyEventNotAllow
edInFullScreen); | 3004 UseCounter::count(*m_frame->document(), UseCounter::KeyEventNotAllow
edInFullScreen); |
| 2998 return false; | 3005 return false; |
| 2999 } | 3006 } |
| 3000 } | 3007 } |
| 3001 | 3008 |
| 3002 if (initialKeyEvent.windowsVirtualKeyCode() == VK_CAPITAL) | 3009 if (initialKeyEvent.windowsVirtualKeyCode() == VK_CAPITAL) |
| (...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3881 unsigned EventHandler::accessKeyModifiers() | 3888 unsigned EventHandler::accessKeyModifiers() |
| 3882 { | 3889 { |
| 3883 #if OS(MACOSX) | 3890 #if OS(MACOSX) |
| 3884 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3891 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
| 3885 #else | 3892 #else |
| 3886 return PlatformEvent::AltKey; | 3893 return PlatformEvent::AltKey; |
| 3887 #endif | 3894 #endif |
| 3888 } | 3895 } |
| 3889 | 3896 |
| 3890 } // namespace blink | 3897 } // namespace blink |
| OLD | NEW |