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

Unified Diff: third_party/WebKit/Source/core/input/GestureManager.cpp

Issue 2249663002: Fixed & refactored mouse event firing at gesture context menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Realigned test outcomes. Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/input/GestureManager.cpp
diff --git a/third_party/WebKit/Source/core/input/GestureManager.cpp b/third_party/WebKit/Source/core/input/GestureManager.cpp
index 8d4d8390eb015b979de2c88dc43261cbc08c0766..a1aa32035c43f8a94b42d338232d25da45742e57 100644
--- a/third_party/WebKit/Source/core/input/GestureManager.cpp
+++ b/third_party/WebKit/Source/core/input/GestureManager.cpp
@@ -187,7 +187,7 @@ WebInputEventResult GestureManager::handleGestureTap(const GestureEventWithHitTe
mouseDownEventResult = m_frame->eventHandler().dispatchMouseEvent(EventTypeNames::mousedown, currentHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseDown);
m_selectionController->initializeSelectionState();
if (mouseDownEventResult == WebInputEventResult::NotHandled)
- mouseDownEventResult = m_frame->eventHandler().handleMouseFocus(MouseEventWithHitTestResults(fakeMouseDown, currentHitTest), InputDeviceCapabilities::firesTouchEventsSourceCapabilities());
+ mouseDownEventResult = m_frame->eventHandler().handleMouseFocus(currentHitTest, InputDeviceCapabilities::firesTouchEventsSourceCapabilities());
if (mouseDownEventResult == WebInputEventResult::NotHandled)
mouseDownEventResult = m_frame->eventHandler().handleMousePressEvent(MouseEventWithHitTestResults(fakeMouseDown, currentHitTest));
}
@@ -303,20 +303,26 @@ WebInputEventResult GestureManager::sendContextMenuEventForGesture(const Gesture
PlatformEvent::EventType eventType = PlatformEvent::MousePressed;
if (m_frame->settings() && m_frame->settings()->showContextMenuOnMouseUp())
eventType = PlatformEvent::MouseReleased;
+ PlatformMouseEvent mouseEvent(targetedEvent.event().position(), targetedEvent.event().globalPosition(), WebPointerProperties::Button::NoButton,
+ eventType, /* clickCount */ 0, static_cast<PlatformEvent::Modifiers>(modifiers), PlatformMouseEvent::FromTouch,
+ WTF::monotonicallyIncreasingTime(), WebPointerProperties::PointerType::Mouse);
- // To simulate right-click behavior, we send a right mouse down and then context menu event.
- // TODO(crbug.com/579564): Maybe we should not send mouse down at all
- PlatformMouseEvent mouseEvent(targetedEvent.event().position(), targetedEvent.event().globalPosition(), WebPointerProperties::Button::Right, eventType, 1,
- static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::RightButtonDown),
- PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), WebPointerProperties::PointerType::Mouse);
- if (!m_suppressMouseEventsFromGestures) {
- // FIXME: Send HitTestResults to avoid redundant hit tests.
- m_frame->eventHandler().handleMousePressEvent(mouseEvent);
+ if (!m_suppressMouseEventsFromGestures && m_frame->view()) {
+ HitTestRequest request(HitTestRequest::Active);
bokan 2016/08/26 16:55:14 We're doing another hit test here right? Can we no
mustaq 2016/08/26 17:19:03 This is because the mousemove dispatched above can
bokan 2016/08/26 17:31:54 Ah, got it.
+ LayoutPoint documentPoint = m_frame->view()->rootFrameToContents(targetedEvent.event().position());
+ MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent);
+
+ WebInputEventResult eventResult = m_frame->eventHandler().dispatchMouseEvent(
+ EventTypeNames::mousedown, mev.innerNode(), /* clickCount */ 0, mouseEvent);
+
+ if (eventResult == WebInputEventResult::NotHandled)
+ eventResult = m_frame->eventHandler().handleMouseFocus(mev.hitTestResult(), InputDeviceCapabilities::firesTouchEventsSourceCapabilities());
+
+ if (eventResult == WebInputEventResult::NotHandled)
+ m_frame->eventHandler().handleMousePressEvent(mev);
Navid Zolghadr 2016/08/29 15:19:50 It seems we have changed the flow quite a bit here
}
return m_frame->eventHandler().sendContextMenuEvent(mouseEvent);
- // We do not need to send a corresponding mouse release because in case of
- // right-click, the context menu takes capture and consumes all events.
}
WebInputEventResult GestureManager::handleGestureShowPress()

Powered by Google App Engine
This is Rietveld 408576698