Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: Source/core/page/EventHandler.cpp

Issue 14089009: Change long press behavior when touch text selection is enabled: (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: patch Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/page/EventHandler.h ('k') | Source/core/page/Settings.in » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « Source/core/page/EventHandler.h ('k') | Source/core/page/Settings.in » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698