| 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);
|
| }
|
|
|
|
|