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 |