Index: Source/WebCore/page/EventHandler.cpp |
diff --git a/Source/WebCore/page/EventHandler.cpp b/Source/WebCore/page/EventHandler.cpp |
index 4266cc9f26bce10c403831123a6c6d22ffa8d554..cf48b3bff382d15d6d2826f608b71758355aa62d 100644 |
--- a/Source/WebCore/page/EventHandler.cpp |
+++ b/Source/WebCore/page/EventHandler.cpp |
@@ -674,7 +674,7 @@ bool EventHandler::handleMousePressEvent(const MouseEventWithHitTestResults& eve |
swallowEvent = handleMousePressEventTripleClick(event); |
else |
swallowEvent = handleMousePressEventSingleClick(event); |
- |
+ |
m_mouseDownMayStartAutoscroll = m_mouseDownMayStartSelect |
|| (m_mousePressNode && m_mousePressNode->renderBox() && m_mousePressNode->renderBox()->canBeProgramaticallyScrolled()); |
@@ -689,28 +689,11 @@ bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e |
if (handleDrag(event, ShouldCheckDragHysteresis)) |
return true; |
- Node* targetNode = event.targetNode(); |
- if (event.event().button() != LeftButton || !targetNode) |
+ if (event.event().button() != LeftButton || !event.targetNode()) |
return false; |
- RenderObject* renderer = targetNode->renderer(); |
- if (!renderer) { |
- Node* parent = EventPathWalker::parent(targetNode); |
- if (!parent) |
- return false; |
- |
- renderer = parent->renderer(); |
- if (!renderer || !renderer->isListBox()) |
- return false; |
- } |
- |
m_mouseDownMayStartDrag = false; |
- if (m_mouseDownMayStartAutoscroll && !panScrollInProgress()) { |
- m_autoscrollController->startAutoscrollForSelection(renderer); |
- m_mouseDownMayStartAutoscroll = false; |
- } |
- |
if (m_selectionInitiationState != ExtendedSelection) { |
HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent); |
HitTestResult result(m_mouseDownPos); |
@@ -1641,9 +1624,11 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent, Hi |
if (m_lastMouseMoveEventSubframe && m_lastMouseMoveEventSubframe->tree()->isDescendantOf(m_frame) && m_lastMouseMoveEventSubframe != newSubframe) |
passMouseMoveEventToSubframe(mev, m_lastMouseMoveEventSubframe.get()); |
+ Node* targetNode = mev.targetNode(); |
+ |
if (newSubframe) { |
// Update over/out state before passing the event to the subframe. |
- updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true); |
+ updateMouseEventTargetNode(targetNode, mouseEvent, true); |
// Event dispatch in updateMouseEventTargetNode may have caused the subframe of the target |
// node to be detached from its FrameView, in which case the event should not be passed. |
@@ -1666,7 +1651,15 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& mouseEvent, Hi |
if (swallowEvent) |
return true; |
- swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, mev.targetNode(), false, 0, mouseEvent, true); |
+ swallowEvent = !dispatchMouseEvent(eventNames().mousemoveEvent, targetNode, false, 0, mouseEvent, true); |
+ |
+ RenderObject* renderer = targetNode ? targetNode->renderer() : 0; |
+ |
+ if (renderer && m_mouseDownMayStartAutoscroll && !panScrollInProgress()) { |
+ m_autoscrollController->startAutoscrollForSelection(renderer); |
+ m_mouseDownMayStartAutoscroll = false; |
+ } |
+ |
if (!swallowEvent) |
swallowEvent = handleMouseDraggedEvent(mev); |
@@ -1998,7 +1991,7 @@ MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques |
{ |
ASSERT(m_frame); |
ASSERT(m_frame->document()); |
- |
+ |
return m_frame->document()->prepareMouseEvent(request, documentPointForWindowPoint(m_frame, mev.position()), mev); |
} |