Index: Source/core/page/EventHandler.cpp |
diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp |
index d8095ea2085fa6b298b03c442156a806851a77c8..d3071b499b7773f83685f23025ff5516bd3f072f 100644 |
--- a/Source/core/page/EventHandler.cpp |
+++ b/Source/core/page/EventHandler.cpp |
@@ -872,7 +872,7 @@ HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTe |
FrameView* frameView = m_frame->view(); |
FrameView* mainView = mainFrame->view(); |
if (frameView && mainView) { |
- IntPoint mainFramePoint = mainView->rootViewToContents(frameView->contentsToRootView(roundedIntPoint(point))); |
+ IntPoint mainFramePoint = mainView->rootFrameToContents(frameView->contentsToRootFrame(roundedIntPoint(point))); |
return mainFrame->eventHandler().hitTestResultAtPoint(mainFramePoint, hitType, padding); |
} |
} |
@@ -2823,7 +2823,7 @@ bool EventHandler::sendContextMenuEventForKey() |
#else |
int rightAligned = 0; |
#endif |
- IntPoint rootViewLocation; |
+ IntPoint locationInViewport; |
Element* focusedElement = doc->focusedElement(); |
FrameSelection& selection = m_frame->selection(); |
Position start = selection.selection().start(); |
@@ -2835,25 +2835,26 @@ bool EventHandler::sendContextMenuEventForKey() |
int x = rightAligned ? firstRect.maxX() : firstRect.x(); |
// In a multiline edit, firstRect.maxY() would endup on the next line, so -1. |
int y = firstRect.maxY() ? firstRect.maxY() - 1 : 0; |
- rootViewLocation = view->contentsToRootView(IntPoint(x, y)); |
+ locationInViewport = view->contentsToWindow(IntPoint(x, y)); |
} else if (focusedElement) { |
- IntRect clippedRect = focusedElement->boundsInRootViewSpace(); |
- rootViewLocation = IntPoint(clippedRect.center()); |
+ IntRect clippedRect = focusedElement->boundsInViewportSpace(); |
+ locationInViewport = IntPoint(clippedRect.center()); |
} else { |
- rootViewLocation = IntPoint( |
+ // FIXME - Almost certainly wrong, this is not in viewport space. crbug.com/458682. |
+ locationInViewport = IntPoint( |
rightAligned ? view->contentsWidth() - kContextMenuMargin : kContextMenuMargin, |
kContextMenuMargin); |
} |
m_frame->view()->setCursor(pointerCursor()); |
- IntPoint globalPosition = view->hostWindow()->rootViewToScreen(IntRect(rootViewLocation, IntSize())).location(); |
+ IntPoint globalPosition = view->hostWindow()->viewportToScreen(IntRect(locationInViewport, IntSize())).location(); |
Node* targetNode = doc->focusedElement(); |
if (!targetNode) |
targetNode = doc; |
// Use the focused node as the target for hover and active. |
- HitTestResult result(rootViewLocation); |
+ HitTestResult result(locationInViewport); |
result.setInnerNode(targetNode); |
doc->updateHoverActiveState(HitTestRequest::Active, result.innerElement()); |
@@ -2863,7 +2864,7 @@ bool EventHandler::sendContextMenuEventForKey() |
if (m_frame->settings()->showContextMenuOnMouseUp()) |
eventType = PlatformEvent::MouseReleased; |
- PlatformMouseEvent mouseEvent(rootViewLocation, globalPosition, RightButton, eventType, 1, false, false, false, false, PlatformMouseEvent::RealOrIndistinguishable, WTF::currentTime()); |
+ PlatformMouseEvent mouseEvent(locationInViewport, globalPosition, RightButton, eventType, 1, false, false, false, false, PlatformMouseEvent::RealOrIndistinguishable, WTF::currentTime()); |
handleMousePressEvent(mouseEvent); |
return sendContextMenuEvent(mouseEvent); |