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 2435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2446 PlatformMouseEvent fakeMouseUp(adjustedPoint, gestureEvent.globalPosition(), | 2446 PlatformMouseEvent fakeMouseUp(adjustedPoint, gestureEvent.globalPosition(), |
2447 LeftButton, PlatformEvent::MouseReleased, tapCount, | 2447 LeftButton, PlatformEvent::MouseReleased, tapCount, |
2448 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(),
gestureEvent.metaKey(), gestureEvent.timestamp()); | 2448 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(),
gestureEvent.metaKey(), gestureEvent.timestamp()); |
2449 defaultPrevented |= handleMouseReleaseEvent(fakeMouseUp); | 2449 defaultPrevented |= handleMouseReleaseEvent(fakeMouseUp); |
2450 | 2450 |
2451 return defaultPrevented; | 2451 return defaultPrevented; |
2452 } | 2452 } |
2453 | 2453 |
2454 bool EventHandler::handleGestureLongPress(const PlatformGestureEvent& gestureEve
nt) | 2454 bool EventHandler::handleGestureLongPress(const PlatformGestureEvent& gestureEve
nt) |
2455 { | 2455 { |
| 2456 IntPoint adjustedPoint = gestureEvent.position(); |
| 2457 #if ENABLE(TOUCH_ADJUSTMENT) |
| 2458 adjustGesturePosition(gestureEvent, adjustedPoint); |
| 2459 #endif |
| 2460 RefPtr<Frame> subframe = getSubFrameForGestureEvent(adjustedPoint, gestureEv
ent); |
| 2461 if (subframe && subframe->eventHandler()->handleGestureLongPress(gestureEven
t)) |
| 2462 return true; |
| 2463 |
| 2464 m_didLongPressInvokeContextMenu = true; |
2456 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_
frame->view()) { | 2465 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_
frame->view()) { |
2457 IntPoint adjustedPoint = gestureEvent.position(); | |
2458 #if ENABLE(TOUCH_ADJUSTMENT) | |
2459 adjustGesturePosition(gestureEvent, adjustedPoint); | |
2460 #endif | |
2461 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MouseMoved, 1, | 2466 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi
tion(), LeftButton, PlatformEvent::MouseMoved, 1, |
2462 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
(), gestureEvent.metaKey(), WTF::currentTime()); | 2467 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey
(), gestureEvent.metaKey(), WTF::currentTime()); |
2463 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Disall
owShadowContent); | 2468 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Disall
owShadowContent); |
2464 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); | 2469 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE
vent); |
2465 m_didStartDrag = false; | 2470 m_didStartDrag = false; |
2466 RefPtr<Frame> subframe = subframeForHitTestResult(mev); | |
2467 if (subframe && subframe->eventHandler()->handleGestureLongPress(gesture
Event)) | |
2468 return true; | |
2469 m_mouseDownMayStartDrag = true; | 2471 m_mouseDownMayStartDrag = true; |
2470 dragState().m_dragSrc = 0; | 2472 dragState().m_dragSrc = 0; |
2471 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
on()); | 2473 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi
on()); |
2472 handleDrag(mev, DontCheckDragHysteresis); | 2474 handleDrag(mev, DontCheckDragHysteresis); |
2473 if (m_didStartDrag) | 2475 if (m_didStartDrag) { |
| 2476 m_didLongPressInvokeContextMenu = false; |
2474 return true; | 2477 return true; |
| 2478 } |
2475 } | 2479 } |
2476 return handleGestureForTextSelectionOrContextMenu(gestureEvent); | 2480 #if OS(ANDROID) |
| 2481 bool shouldLongPressSelectWord = true; |
| 2482 #else |
| 2483 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()-
>touchEditingEnabled(); |
| 2484 #endif |
| 2485 if (shouldLongPressSelectWord) { |
| 2486 IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.pos
ition()); |
| 2487 HitTestResult result = hitTestResultAtPoint(hitTestPoint, HitTestRequest::
ReadOnly | HitTestRequest::Active); |
| 2488 Node* innerNode = result.targetNode(); |
| 2489 if (!result.isLiveLink() && innerNode && (innerNode->isContentEditable() |
| innerNode->isTextNode())) { |
| 2490 selectClosestWordFromHitTestResult(result, DontAppendTrailingWhitespac
e); |
| 2491 if (m_frame->selection()->isRange()) |
| 2492 return true; |
| 2493 } |
| 2494 } |
| 2495 return sendContextMenuEventForGesture(gestureEvent); |
2477 } | 2496 } |
2478 | 2497 |
2479 bool EventHandler::handleGestureLongTap(const PlatformGestureEvent& gestureEvent
) | 2498 bool EventHandler::handleGestureLongTap(const PlatformGestureEvent& gestureEvent
) |
2480 { | 2499 { |
| 2500 IntPoint adjustedPoint = gestureEvent.position(); |
| 2501 #if ENABLE(TOUCH_ADJUSTMENT) |
| 2502 adjustGesturePosition(gestureEvent, adjustedPoint); |
| 2503 #endif |
| 2504 RefPtr<Frame> subframe = getSubFrameForGestureEvent(adjustedPoint, gestureEv
ent); |
| 2505 if (subframe && subframe->eventHandler()->handleGestureLongTap(gestureEvent)
) |
| 2506 return true; |
2481 #if !OS(ANDROID) | 2507 #if !OS(ANDROID) |
2482 if (!m_didLongPressInvokeContextMenu) | 2508 if (!m_didLongPressInvokeContextMenu) |
2483 return sendContextMenuEventForGesture(gestureEvent); | 2509 return sendContextMenuEventForGesture(gestureEvent); |
| 2510 m_didLongPressInvokeContextMenu = true; |
2484 #endif | 2511 #endif |
2485 return false; | 2512 return false; |
2486 } | 2513 } |
2487 | 2514 |
2488 bool EventHandler::handleGestureForTextSelectionOrContextMenu(const PlatformGest
ureEvent& gestureEvent) | 2515 bool EventHandler::handleGestureTwoFingerTap(const PlatformGestureEvent& gesture
Event) |
2489 { | 2516 { |
2490 #if OS(ANDROID) | |
2491 IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.posit
ion()); | |
2492 HitTestResult result = hitTestResultAtPoint(hitTestPoint, HitTestRequest::Re
adOnly | HitTestRequest::Active); | |
2493 Node* innerNode = result.targetNode(); | |
2494 if (!result.isLiveLink() && innerNode && (innerNode->isContentEditable() ||
innerNode->isTextNode())) { | |
2495 selectClosestWordFromHitTestResult(result, DontAppendTrailingWhitespace)
; | |
2496 if (m_frame->selection()->isRange()) | |
2497 return true; | |
2498 } | |
2499 #endif | |
2500 m_didLongPressInvokeContextMenu = (gestureEvent.type() == PlatformEvent::Ges
tureLongPress); | |
2501 | |
2502 return sendContextMenuEventForGesture(gestureEvent); | 2517 return sendContextMenuEventForGesture(gestureEvent); |
2503 } | 2518 } |
2504 | 2519 |
2505 bool EventHandler::handleGestureTwoFingerTap(const PlatformGestureEvent& gesture
Event) | |
2506 { | |
2507 return handleGestureForTextSelectionOrContextMenu(gestureEvent); | |
2508 } | |
2509 | |
2510 bool EventHandler::passGestureEventToWidget(const PlatformGestureEvent& gestureE
vent, Widget* widget) | 2520 bool EventHandler::passGestureEventToWidget(const PlatformGestureEvent& gestureE
vent, Widget* widget) |
2511 { | 2521 { |
2512 if (!widget) | 2522 if (!widget) |
2513 return false; | 2523 return false; |
2514 | 2524 |
2515 if (!widget->isFrameView()) | 2525 if (!widget->isFrameView()) |
2516 return false; | 2526 return false; |
2517 | 2527 |
2518 return toFrameView(widget)->frame()->eventHandler()->handleGestureEvent(gest
ureEvent); | 2528 return toFrameView(widget)->frame()->eventHandler()->handleGestureEvent(gest
ureEvent); |
2519 } | 2529 } |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2616 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(),
gestureEvent.metaKey()); | 2626 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(),
gestureEvent.metaKey()); |
2617 syntheticWheelEvent.setHasPreciseScrollingDeltas(true); | 2627 syntheticWheelEvent.setHasPreciseScrollingDeltas(true); |
2618 | 2628 |
2619 bool scrolledFrame = view->wheelEvent(syntheticWheelEvent); | 2629 bool scrolledFrame = view->wheelEvent(syntheticWheelEvent); |
2620 if (scrolledFrame) | 2630 if (scrolledFrame) |
2621 setFrameWasScrolledByUser(); | 2631 setFrameWasScrolledByUser(); |
2622 | 2632 |
2623 return scrolledFrame; | 2633 return scrolledFrame; |
2624 } | 2634 } |
2625 | 2635 |
| 2636 Frame* EventHandler::getSubFrameForGestureEvent(const IntPoint& touchAdjustedPoi
nt, const PlatformGestureEvent& gestureEvent) |
| 2637 { |
| 2638 PlatformMouseEvent mouseDown(touchAdjustedPoint, gestureEvent.globalPosition
(), LeftButton, PlatformEvent::MousePressed, 1, |
| 2639 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(),
gestureEvent.metaKey(), gestureEvent.timestamp()); |
| 2640 HitTestRequest request(HitTestRequest::ReadOnly); |
| 2641 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDown); |
| 2642 return EventHandler::subframeForHitTestResult(mev); |
| 2643 } |
| 2644 |
2626 void EventHandler::clearGestureScrollNodes() | 2645 void EventHandler::clearGestureScrollNodes() |
2627 { | 2646 { |
2628 m_scrollGestureHandlingNode = 0; | 2647 m_scrollGestureHandlingNode = 0; |
2629 m_previousGestureScrolledNode = 0; | 2648 m_previousGestureScrolledNode = 0; |
2630 } | 2649 } |
2631 | 2650 |
2632 bool EventHandler::isScrollbarHandlingGestures() const | 2651 bool EventHandler::isScrollbarHandlingGestures() const |
2633 { | 2652 { |
2634 return m_scrollbarHandlingScrollGesture.get(); | 2653 return m_scrollbarHandlingScrollGesture.get(); |
2635 } | 2654 } |
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3972 unsigned EventHandler::accessKeyModifiers() | 3991 unsigned EventHandler::accessKeyModifiers() |
3973 { | 3992 { |
3974 #if OS(DARWIN) | 3993 #if OS(DARWIN) |
3975 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 3994 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
3976 #else | 3995 #else |
3977 return PlatformEvent::AltKey; | 3996 return PlatformEvent::AltKey; |
3978 #endif | 3997 #endif |
3979 } | 3998 } |
3980 | 3999 |
3981 } // namespace WebCore | 4000 } // namespace WebCore |
OLD | NEW |