Index: Source/core/page/EventHandler.cpp |
diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp |
index 0bc19a21a3ae478648db1867035abbfdf6b072c4..287372266e1375a745ca882f8b67c2b8ea649070 100644 |
--- a/Source/core/page/EventHandler.cpp |
+++ b/Source/core/page/EventHandler.cpp |
@@ -1287,26 +1287,14 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) |
if (swallowEvent) { |
// scrollbars should get events anyway, even disabled controls might be scrollable |
- Scrollbar* scrollbar = mev.scrollbar(); |
- |
- updateLastScrollbarUnderMouse(scrollbar, true); |
- |
- if (scrollbar) |
- passMousePressEventToScrollbar(mev, scrollbar); |
+ passMousePressEventToScrollbar(mev); |
} else { |
if (shouldRefetchEventTarget(mev)) { |
HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::ConfusingAndOftenMisusedDisallowShadowContent); |
mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent); |
} |
- FrameView* view = m_frame->view(); |
- Scrollbar* scrollbar = view ? view->scrollbarAtPoint(mouseEvent.position()) : 0; |
- if (!scrollbar) |
- scrollbar = mev.scrollbar(); |
- |
- updateLastScrollbarUnderMouse(scrollbar, true); |
- |
- if (scrollbar && passMousePressEventToScrollbar(mev, scrollbar)) |
+ if (passMousePressEventToScrollbar(mev)) |
swallowEvent = true; |
else |
swallowEvent = handleMousePressEvent(mev); |
@@ -3319,8 +3307,18 @@ void EventHandler::setFrameWasScrolledByUser() |
view->setWasScrolledByUser(true); |
} |
-bool EventHandler::passMousePressEventToScrollbar(MouseEventWithHitTestResults& mev, Scrollbar* scrollbar) |
+bool EventHandler::passMousePressEventToScrollbar(MouseEventWithHitTestResults& mev) |
{ |
+ // First try to use the frame scrollbar. |
+ FrameView* view = m_frame->view(); |
+ Scrollbar* scrollbar = view ? view->scrollbarAtPoint(mev.event().position()) : 0; |
+ |
+ // Then try the scrollbar in the hit test. |
+ if (!scrollbar) |
+ scrollbar = mev.scrollbar(); |
+ |
+ updateLastScrollbarUnderMouse(scrollbar, true); |
+ |
if (!scrollbar || !scrollbar->enabled()) |
return false; |
setFrameWasScrolledByUser(); |