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 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 ASSERT(!m_fakeMouseMoveEventTimer.isActive()); | 236 ASSERT(!m_fakeMouseMoveEventTimer.isActive()); |
237 } | 237 } |
238 | 238 |
239 void EventHandler::trace(Visitor* visitor) | 239 void EventHandler::trace(Visitor* visitor) |
240 { | 240 { |
241 #if ENABLE(OILPAN) | 241 #if ENABLE(OILPAN) |
242 visitor->trace(m_mousePressNode); | 242 visitor->trace(m_mousePressNode); |
243 visitor->trace(m_capturingMouseEventsNode); | 243 visitor->trace(m_capturingMouseEventsNode); |
244 visitor->trace(m_nodeUnderMouse); | 244 visitor->trace(m_nodeUnderMouse); |
245 visitor->trace(m_lastNodeUnderMouse); | 245 visitor->trace(m_lastNodeUnderMouse); |
| 246 visitor->trace(m_lastMouseMoveEventSubframe); |
246 visitor->trace(m_clickNode); | 247 visitor->trace(m_clickNode); |
247 visitor->trace(m_dragTarget); | 248 visitor->trace(m_dragTarget); |
248 visitor->trace(m_frameSetBeingResized); | 249 visitor->trace(m_frameSetBeingResized); |
249 visitor->trace(m_latchedWheelEventNode); | 250 visitor->trace(m_latchedWheelEventNode); |
250 visitor->trace(m_previousWheelScrolledNode); | 251 visitor->trace(m_previousWheelScrolledNode); |
251 visitor->trace(m_targetForTouchID); | 252 visitor->trace(m_targetForTouchID); |
252 visitor->trace(m_touchSequenceDocument); | 253 visitor->trace(m_touchSequenceDocument); |
253 visitor->trace(m_scrollGestureHandlingNode); | 254 visitor->trace(m_scrollGestureHandlingNode); |
254 visitor->trace(m_previousGestureScrolledNode); | 255 visitor->trace(m_previousGestureScrolledNode); |
255 visitor->trace(m_lastDeferredTapElement); | 256 visitor->trace(m_lastDeferredTapElement); |
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1233 LayoutPoint documentPoint = documentPointForWindowPoint(m_frame, mouseEvent.
position()); | 1234 LayoutPoint documentPoint = documentPointForWindowPoint(m_frame, mouseEvent.
position()); |
1234 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re
quest, documentPoint, mouseEvent); | 1235 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re
quest, documentPoint, mouseEvent); |
1235 | 1236 |
1236 if (!mev.targetNode()) { | 1237 if (!mev.targetNode()) { |
1237 invalidateClick(); | 1238 invalidateClick(); |
1238 return false; | 1239 return false; |
1239 } | 1240 } |
1240 | 1241 |
1241 m_mousePressNode = mev.targetNode(); | 1242 m_mousePressNode = mev.targetNode(); |
1242 | 1243 |
1243 RefPtr<LocalFrame> subframe = subframeForHitTestResult(mev); | 1244 RefPtrWillBeRawPtr<LocalFrame> subframe = subframeForHitTestResult(mev); |
1244 if (subframe && passMousePressEventToSubframe(mev, subframe.get())) { | 1245 if (subframe && passMousePressEventToSubframe(mev, subframe.get())) { |
1245 // Start capturing future events for this frame. We only do this if we
didn't clear | 1246 // Start capturing future events for this frame. We only do this if we
didn't clear |
1246 // the m_mousePressed flag, which may happen if an AppKit widget entered
a modal event loop. | 1247 // the m_mousePressed flag, which may happen if an AppKit widget entered
a modal event loop. |
1247 m_capturesDragging = subframe->eventHandler().capturesDragging(); | 1248 m_capturesDragging = subframe->eventHandler().capturesDragging(); |
1248 if (m_mousePressed && m_capturesDragging) { | 1249 if (m_mousePressed && m_capturesDragging) { |
1249 m_capturingMouseEventsNode = mev.targetNode(); | 1250 m_capturingMouseEventsNode = mev.targetNode(); |
1250 m_eventHandlerWillResetCapturingMouseEventsNode = true; | 1251 m_eventHandlerWillResetCapturingMouseEventsNode = true; |
1251 } | 1252 } |
1252 invalidateClick(); | 1253 invalidateClick(); |
1253 return true; | 1254 return true; |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1442 | 1443 |
1443 if (!scrollbar) | 1444 if (!scrollbar) |
1444 scrollbar = mev.scrollbar(); | 1445 scrollbar = mev.scrollbar(); |
1445 | 1446 |
1446 updateLastScrollbarUnderMouse(scrollbar, !m_mousePressed); | 1447 updateLastScrollbarUnderMouse(scrollbar, !m_mousePressed); |
1447 if (onlyUpdateScrollbars) | 1448 if (onlyUpdateScrollbars) |
1448 return true; | 1449 return true; |
1449 } | 1450 } |
1450 | 1451 |
1451 bool swallowEvent = false; | 1452 bool swallowEvent = false; |
1452 RefPtr<LocalFrame> newSubframe = m_capturingMouseEventsNode.get() ? subframe
ForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTestResult(mev); | 1453 RefPtrWillBeRawPtr<LocalFrame> newSubframe = m_capturingMouseEventsNode.get(
) ? subframeForTargetNode(m_capturingMouseEventsNode.get()) : subframeForHitTest
Result(mev); |
1453 | 1454 |
1454 // 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. |
1455 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) |
1456 passMouseMoveEventToSubframe(mev, m_lastMouseMoveEventSubframe.get()); | 1457 passMouseMoveEventToSubframe(mev, m_lastMouseMoveEventSubframe.get()); |
1457 | 1458 |
1458 if (newSubframe) { | 1459 if (newSubframe) { |
1459 // Update over/out state before passing the event to the subframe. | 1460 // Update over/out state before passing the event to the subframe. |
1460 updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); | 1461 updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); |
1461 | 1462 |
1462 // 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 |
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2078 if (gestureEvent.isScrollEvent()) | 2079 if (gestureEvent.isScrollEvent()) |
2079 return handleGestureScrollEvent(gestureEvent); | 2080 return handleGestureScrollEvent(gestureEvent); |
2080 | 2081 |
2081 // 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 |
2082 // jump directly to the inner most frame. This matches handleMousePressEvent
etc. | 2083 // jump directly to the inner most frame. This matches handleMousePressEvent
etc. |
2083 | 2084 |
2084 // 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. |
2085 GestureEventWithHitTestResults targetedEvent = targetGestureEvent(gestureEve
nt); | 2086 GestureEventWithHitTestResults targetedEvent = targetGestureEvent(gestureEve
nt); |
2086 | 2087 |
2087 // Route to the correct frame. | 2088 // Route to the correct frame. |
2088 if (LocalFrame* innerFrame = targetedEvent.hitTestResult().innerNodeFrame()) | 2089 if (LocalFrame* innerFrame = targetedEvent.hitTestResult().innerNodeFrame())
{ |
2089 return innerFrame->eventHandler().handleGestureEventInFrame(targetedEven
t); | 2090 return innerFrame->eventHandler().handleGestureEventInFrame(targetedEven
t); |
| 2091 } |
2090 | 2092 |
2091 // 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? |
2092 return handleGestureEventInFrame(targetedEvent); | 2094 return handleGestureEventInFrame(targetedEvent); |
2093 } | 2095 } |
2094 | 2096 |
2095 bool EventHandler::handleGestureEventInFrame(const GestureEventWithHitTestResult
s& targetedEvent) | 2097 bool EventHandler::handleGestureEventInFrame(const GestureEventWithHitTestResult
s& targetedEvent) |
2096 { | 2098 { |
2097 ASSERT(!targetedEvent.event().isScrollEvent()); | 2099 ASSERT(!targetedEvent.event().isScrollEvent()); |
2098 | 2100 |
2099 RefPtrWillBeRawPtr<Node> eventTarget = targetedEvent.hitTestResult().targetN
ode(); | 2101 RefPtrWillBeRawPtr<Node> eventTarget = targetedEvent.hitTestResult().targetN
ode(); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2202 return false; | 2204 return false; |
2203 default: | 2205 default: |
2204 ASSERT_NOT_REACHED(); | 2206 ASSERT_NOT_REACHED(); |
2205 return false; | 2207 return false; |
2206 } | 2208 } |
2207 } | 2209 } |
2208 | 2210 |
2209 bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target
edEvent) | 2211 bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target
edEvent) |
2210 { | 2212 { |
2211 RefPtr<FrameView> protector(m_frame->view()); | 2213 RefPtr<FrameView> protector(m_frame->view()); |
| 2214 |
2212 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); | 2215 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); |
2213 | 2216 |
2214 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); | 2217 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); |
2215 | 2218 |
2216 unsigned modifierFlags = 0; | 2219 unsigned modifierFlags = 0; |
2217 if (gestureEvent.altKey()) | 2220 if (gestureEvent.altKey()) |
2218 modifierFlags |= PlatformEvent::AltKey; | 2221 modifierFlags |= PlatformEvent::AltKey; |
2219 if (gestureEvent.ctrlKey()) | 2222 if (gestureEvent.ctrlKey()) |
2220 modifierFlags |= PlatformEvent::CtrlKey; | 2223 modifierFlags |= PlatformEvent::CtrlKey; |
2221 if (gestureEvent.metaKey()) | 2224 if (gestureEvent.metaKey()) |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2295 | 2298 |
2296 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MouseMoved, 1, | 2299 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MouseMoved, 1, |
2297 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()); |
2298 HitTestRequest request(HitTestRequest::ReadOnly); | 2301 HitTestRequest request(HitTestRequest::ReadOnly); |
2299 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); | 2302 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); |
2300 m_didStartDrag = false; | 2303 m_didStartDrag = false; |
2301 m_mouseDownMayStartDrag = true; | 2304 m_mouseDownMayStartDrag = true; |
2302 dragState().m_dragSrc = nullptr; | 2305 dragState().m_dragSrc = nullptr; |
2303 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
on()); | 2306 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
on()); |
2304 RefPtr<FrameView> protector(m_frame->view()); | 2307 RefPtr<FrameView> protector(m_frame->view()); |
| 2308 |
2305 handleDrag(mev, DontCheckDragHysteresis); | 2309 handleDrag(mev, DontCheckDragHysteresis); |
2306 if (m_didStartDrag) { | 2310 if (m_didStartDrag) { |
2307 m_longTapShouldInvokeContextMenu = true; | 2311 m_longTapShouldInvokeContextMenu = true; |
2308 return true; | 2312 return true; |
2309 } | 2313 } |
2310 } | 2314 } |
2311 #if OS(ANDROID) | 2315 #if OS(ANDROID) |
2312 bool shouldLongPressSelectWord = true; | 2316 bool shouldLongPressSelectWord = true; |
2313 #else | 2317 #else |
2314 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()-
>touchEditingEnabled(); | 2318 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()-
>touchEditingEnabled(); |
(...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3889 unsigned EventHandler::accessKeyModifiers() | 3893 unsigned EventHandler::accessKeyModifiers() |
3890 { | 3894 { |
3891 #if OS(MACOSX) | 3895 #if OS(MACOSX) |
3892 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3896 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
3893 #else | 3897 #else |
3894 return PlatformEvent::AltKey; | 3898 return PlatformEvent::AltKey; |
3895 #endif | 3899 #endif |
3896 } | 3900 } |
3897 | 3901 |
3898 } // namespace blink | 3902 } // namespace blink |
OLD | NEW |