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

Side by Side Diff: third_party/WebKit/Source/core/input/EventHandler.cpp

Issue 2141993003: PointerEvents for long-press: fix double firing & canceling MEs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed preventing MEs on canceled pointerdowns Created 4 years, 5 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
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 845 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 FrameView* view = m_frame->view(); 856 FrameView* view = m_frame->view();
857 PaintLayer* layer = mev.innerNode()->layoutObject() ? mev.innerNode()->l ayoutObject()->enclosingLayer() : nullptr; 857 PaintLayer* layer = mev.innerNode()->layoutObject() ? mev.innerNode()->l ayoutObject()->enclosingLayer() : nullptr;
858 IntPoint p = view->rootFrameToContents(mouseEvent.position()); 858 IntPoint p = view->rootFrameToContents(mouseEvent.position());
859 if (layer && layer->getScrollableArea() && layer->getScrollableArea()->i sPointInResizeControl(p, ResizerForPointer)) { 859 if (layer && layer->getScrollableArea() && layer->getScrollableArea()->i sPointInResizeControl(p, ResizerForPointer)) {
860 m_scrollManager.setResizeScrollableArea(layer, p); 860 m_scrollManager.setResizeScrollableArea(layer, p);
861 return WebInputEventResult::HandledSystem; 861 return WebInputEventResult::HandledSystem;
862 } 862 }
863 } 863 }
864 864
865 // m_selectionInitiationState is initialized after dispatching mousedown 865 // m_selectionInitiationState is initialized after dispatching mousedown
866 // event in order not to keep the selection by DOM APIs Because we can't 866 // event in order not to keep the selection by DOM APIs because we can't
867 // give the user the chance to handle the selection by user action like 867 // give the user the chance to handle the selection by user action like
868 // dragging if we keep the selection in case of mousedown. FireFox also has 868 // dragging if we keep the selection in case of mousedown. FireFox also has
869 // the same behavior and it's more compatible with other browsers. 869 // the same behavior and it's more compatible with other browsers.
870 selectionController().initializeSelectionState(); 870 selectionController().initializeSelectionState();
871 HitTestResult hitTestResult = hitTestResultInFrame(m_frame, documentPoint, H itTestRequest::ReadOnly); 871 HitTestResult hitTestResult = hitTestResultInFrame(m_frame, documentPoint, H itTestRequest::ReadOnly);
872 InputDeviceCapabilities* sourceCapabilities = mouseEvent.getSyntheticEventTy pe() == PlatformMouseEvent::FromTouch ? InputDeviceCapabilities::firesTouchEvent sSourceCapabilities() : 872 InputDeviceCapabilities* sourceCapabilities = mouseEvent.getSyntheticEventTy pe() == PlatformMouseEvent::FromTouch ? InputDeviceCapabilities::firesTouchEvent sSourceCapabilities() :
873 InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities(); 873 InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities();
874 if (eventResult == WebInputEventResult::NotHandled) 874 if (eventResult == WebInputEventResult::NotHandled)
875 eventResult = handleMouseFocus(MouseEventWithHitTestResults(mev.event(), hitTestResult), sourceCapabilities); 875 eventResult = handleMouseFocus(MouseEventWithHitTestResults(mev.event(), hitTestResult), sourceCapabilities);
876 m_capturesDragging = eventResult == WebInputEventResult::NotHandled || mev.s crollbar(); 876 m_capturesDragging = eventResult == WebInputEventResult::NotHandled || mev.s crollbar();
(...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2087 eventType = PlatformEvent::MouseReleased; 2087 eventType = PlatformEvent::MouseReleased;
2088 2088
2089 PlatformMouseEvent mouseEvent(locationInRootFrame, globalPosition, 2089 PlatformMouseEvent mouseEvent(locationInRootFrame, globalPosition,
2090 RightButton, eventType, 1, 2090 RightButton, eventType, 1,
2091 PlatformEvent::NoModifiers, PlatformMouseEvent::RealOrIndistinguishable, 2091 PlatformEvent::NoModifiers, PlatformMouseEvent::RealOrIndistinguishable,
2092 WTF::monotonicallyIncreasingTime(), WebPointerProperties::PointerType::M ouse); 2092 WTF::monotonicallyIncreasingTime(), WebPointerProperties::PointerType::M ouse);
2093 2093
2094 return sendContextMenuEvent(mouseEvent, overrideTargetElement); 2094 return sendContextMenuEvent(mouseEvent, overrideTargetElement);
2095 } 2095 }
2096 2096
2097 WebInputEventResult EventHandler::sendContextMenuEventForGesture(const GestureEv entWithHitTestResults& targetedEvent)
2098 {
2099 const PlatformGestureEvent& gestureEvent = targetedEvent.event();
2100 unsigned modifiers = gestureEvent.getModifiers();
2101
2102 // Send MouseMoved event prior to handling (https://crbug.com/485290).
2103 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(),
2104 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0,
2105 static_cast<PlatformEvent::Modifiers>(modifiers),
2106 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), WebPointerPrope rties::PointerType::Mouse);
2107 dispatchMouseEvent(EventTypeNames::mousemove, targetedEvent.hitTestResult(). innerNode(), 0, fakeMouseMove);
2108
2109 PlatformEvent::EventType eventType = PlatformEvent::MousePressed;
2110
2111 if (m_frame->settings() && m_frame->settings()->showContextMenuOnMouseUp())
2112 eventType = PlatformEvent::MouseReleased;
2113
2114 // Always set right button down as we are sending mousedown event regardless
2115 modifiers |= PlatformEvent::RightButtonDown;
2116
2117 // TODO(crbug.com/579564): Maybe we should not send mouse down at all
2118 PlatformMouseEvent mouseEvent(targetedEvent.event().position(), targetedEven t.event().globalPosition(), RightButton, eventType, 1,
2119 static_cast<PlatformEvent::Modifiers>(modifiers),
2120 PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), WebPo interProperties::PointerType::Mouse);
2121 // To simulate right-click behavior, we send a right mouse down and then
2122 // context menu event.
2123 // FIXME: Send HitTestResults to avoid redundant hit tests.
2124 handleMousePressEvent(mouseEvent);
2125 return sendContextMenuEvent(mouseEvent);
2126 // We do not need to send a corresponding mouse release because in case of
2127 // right-click, the context menu takes capture and consumes all events.
2128 }
2129
2130 void EventHandler::scheduleHoverStateUpdate() 2097 void EventHandler::scheduleHoverStateUpdate()
2131 { 2098 {
2132 if (!m_hoverTimer.isActive()) 2099 if (!m_hoverTimer.isActive())
2133 m_hoverTimer.startOneShot(0, BLINK_FROM_HERE); 2100 m_hoverTimer.startOneShot(0, BLINK_FROM_HERE);
2134 } 2101 }
2135 2102
2136 void EventHandler::scheduleCursorUpdate() 2103 void EventHandler::scheduleCursorUpdate()
2137 { 2104 {
2138 // We only want one timer for the page, rather than each frame having it's o wn timer 2105 // We only want one timer for the page, rather than each frame having it's o wn timer
2139 // competing which eachother (since there's only one mouse cursor). 2106 // competing which eachother (since there's only one mouse cursor).
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
2611 2578
2612 FrameHost* EventHandler::frameHost() const 2579 FrameHost* EventHandler::frameHost() const
2613 { 2580 {
2614 if (!m_frame->page()) 2581 if (!m_frame->page())
2615 return nullptr; 2582 return nullptr;
2616 2583
2617 return &m_frame->page()->frameHost(); 2584 return &m_frame->page()->frameHost();
2618 } 2585 }
2619 2586
2620 } // namespace blink 2587 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698