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

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

Issue 2389073002: Fix link's hover state if the link under scrollbar (Closed)
Patch Set: Merge patch-2467693002 to fix testcase failed in OSX Created 4 years, 1 month 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/EventHandler.cpp
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index a40a5bc065dff8cd721b95a119fcf4bc36e0dad3..edc9647675db56831317f6320b72ed099891a880 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -278,8 +278,10 @@ HitTestResult EventHandler::hitTestResultAtPoint(
return result;
m_frame->contentLayoutItem().hitTest(result);
- if (!request.readOnly())
- m_frame->document()->updateHoverActiveState(request, result.innerElement());
+ if (!request.readOnly()) {
+ m_frame->document()->updateHoverActiveState(request, result.innerElement(),
+ result.scrollbar());
+ }
return result;
}
@@ -529,6 +531,10 @@ OptionalCursor EventHandler::selectCursor(const HitTestResult& result) {
OptionalCursor EventHandler::selectAutoCursor(const HitTestResult& result,
Node* node,
const Cursor& iBeam) {
+ if (result.scrollbar()) {
+ return pointerCursor();
+ }
+
bool editable = (node && hasEditableStyle(*node));
const bool isOverLink =
@@ -811,7 +817,7 @@ WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(
// So we must force the hit-test to fail, while still clearing hover/active
// state.
if (forceLeave) {
- m_frame->document()->updateHoverActiveState(request, 0);
+ m_frame->document()->updateHoverActiveState(request, nullptr, false);
} else {
mev = EventHandlingUtil::performMouseEventHitTest(m_frame, request,
mouseEvent);
@@ -1525,13 +1531,13 @@ void EventHandler::updateGestureHoverActiveState(const HitTestRequest& request,
// If the old hovered frame is different from the new hovered frame.
// we should clear the old hovered node from the old hovered frame.
if (newHoverFrame != oldHoverFrame)
- doc->updateHoverActiveState(request, nullptr);
+ doc->updateHoverActiveState(request, nullptr, false);
}
}
// Recursively set the new active/hover states on every frame in the chain of
// innerElement.
- m_frame->document()->updateHoverActiveState(request, innerElement);
+ m_frame->document()->updateHoverActiveState(request, innerElement, false);
}
// Update the mouseover/mouseenter/mouseout/mouseleave events across all frames
@@ -1857,7 +1863,8 @@ WebInputEventResult EventHandler::sendContextMenuEventForKey(
HitTestRequest request(HitTestRequest::Active);
HitTestResult result(request, locationInRootFrame);
result.setInnerNode(targetNode);
- doc->updateHoverActiveState(request, result.innerElement());
+ doc->updateHoverActiveState(request, result.innerElement(),
+ result.scrollbar());
// The contextmenu event is a mouse event even when invoked using the
// keyboard. This is required for web compatibility.
@@ -1923,8 +1930,8 @@ void EventHandler::hoverTimerFired(TimerBase*) {
view->rootFrameToContents(
m_mouseEventManager->lastKnownMousePosition()));
layoutItem.hitTest(result);
- m_frame->document()->updateHoverActiveState(request,
- result.innerElement());
+ m_frame->document()->updateHoverActiveState(
+ request, result.innerElement(), result.scrollbar());
}
}
}
@@ -1938,8 +1945,8 @@ void EventHandler::activeIntervalTimerFired(TimerBase*) {
// m_lastDeferredTapElement.get() == m_frame->document()->activeElement()
HitTestRequest request(HitTestRequest::TouchEvent |
HitTestRequest::Release);
- m_frame->document()->updateHoverActiveState(request,
- m_lastDeferredTapElement.get());
+ m_frame->document()->updateHoverActiveState(
+ request, m_lastDeferredTapElement.get(), false);
}
m_lastDeferredTapElement = nullptr;
}
« no previous file with comments | « third_party/WebKit/Source/core/dom/Document.cpp ('k') | third_party/WebKit/Source/core/page/ChromeClient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698