| Index: Source/core/page/EventHandler.cpp
|
| diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp
|
| index 54c1f1c8963a4286bd0f0815620b50883092a431..38607f0a5832a63f92a5c124b2a41740e8fb0f1b 100644
|
| --- a/Source/core/page/EventHandler.cpp
|
| +++ b/Source/core/page/EventHandler.cpp
|
| @@ -420,10 +420,11 @@ bool EventHandler::updateSelectionForMouseDownDispatchingSelectStart(Node* targe
|
| void EventHandler::selectClosestWordFromHitTestResult(const HitTestResult& result, AppendTrailingWhitespace appendTrailingWhitespace)
|
| {
|
| Node* innerNode = result.targetNode();
|
| + RenderObject* renderer = result.renderer();
|
| VisibleSelection newSelection;
|
|
|
| - if (innerNode && innerNode->renderer()) {
|
| - VisiblePosition pos(innerNode->renderer()->positionForPoint(result.localPoint()));
|
| + if (innerNode && renderer) {
|
| + VisiblePosition pos(renderer->positionForPoint(result.localPoint()));
|
| if (pos.isNotNull()) {
|
| newSelection = VisibleSelection(pos);
|
| newSelection.expandUsingGranularity(WordGranularity);
|
| @@ -439,10 +440,11 @@ void EventHandler::selectClosestWordFromHitTestResult(const HitTestResult& resul
|
| void EventHandler::selectClosestMisspellingFromHitTestResult(const HitTestResult& result, AppendTrailingWhitespace appendTrailingWhitespace)
|
| {
|
| Node* innerNode = result.targetNode();
|
| + RenderObject* renderer = result.renderer();
|
| VisibleSelection newSelection;
|
|
|
| - if (innerNode && innerNode->renderer()) {
|
| - VisiblePosition pos(innerNode->renderer()->positionForPoint(result.localPoint()));
|
| + if (innerNode && renderer) {
|
| + VisiblePosition pos(renderer->positionForPoint(result.localPoint()));
|
| Position start = pos.deepEquivalent();
|
| Position end = pos.deepEquivalent();
|
| if (pos.isNotNull()) {
|
| @@ -484,11 +486,12 @@ void EventHandler::selectClosestWordOrLinkFromMouseEvent(const MouseEventWithHit
|
| return selectClosestWordFromMouseEvent(result);
|
|
|
| Node* innerNode = result.targetNode();
|
| + RenderObject* renderer = result.hitTestResult().renderer();
|
|
|
| - if (innerNode && innerNode->renderer() && m_mouseDownMayStartSelect) {
|
| + if (innerNode && renderer && m_mouseDownMayStartSelect) {
|
| VisibleSelection newSelection;
|
| Element* URLElement = result.hitTestResult().URLElement();
|
| - VisiblePosition pos(innerNode->renderer()->positionForPoint(result.localPoint()));
|
| + VisiblePosition pos(renderer->positionForPoint(result.localPoint()));
|
| if (pos.isNotNull() && pos.deepEquivalent().deprecatedNode()->isDescendantOf(URLElement))
|
| newSelection = VisibleSelection::selectionFromContentsOfNode(URLElement);
|
|
|
| @@ -520,11 +523,12 @@ bool EventHandler::handleMousePressEventTripleClick(const MouseEventWithHitTestR
|
| return false;
|
|
|
| Node* innerNode = event.targetNode();
|
| - if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect))
|
| + RenderObject* renderer = event.hitTestResult().renderer();
|
| + if (!(innerNode && renderer && m_mouseDownMayStartSelect))
|
| return false;
|
|
|
| VisibleSelection newSelection;
|
| - VisiblePosition pos(innerNode->renderer()->positionForPoint(event.localPoint()));
|
| + VisiblePosition pos(renderer->positionForPoint(event.localPoint()));
|
| if (pos.isNotNull()) {
|
| newSelection = VisibleSelection(pos);
|
| newSelection.expandUsingGranularity(ParagraphGranularity);
|
| @@ -543,7 +547,8 @@ bool EventHandler::handleMousePressEventSingleClick(const MouseEventWithHitTestR
|
| {
|
| m_frame->document()->updateLayoutIgnorePendingStylesheets();
|
| Node* innerNode = event.targetNode();
|
| - if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect))
|
| + RenderObject* renderer = event.hitTestResult().renderer();
|
| + if (!(innerNode && renderer && m_mouseDownMayStartSelect))
|
| return false;
|
|
|
| // Extend the selection if the Shift key is down, unless the click is in a link.
|
| @@ -559,7 +564,7 @@ bool EventHandler::handleMousePressEventSingleClick(const MouseEventWithHitTestR
|
| }
|
| }
|
|
|
| - VisiblePosition visiblePos(innerNode->renderer()->positionForPoint(event.localPoint()));
|
| + VisiblePosition visiblePos(renderer->positionForPoint(event.localPoint()));
|
| if (visiblePos.isNull())
|
| visiblePos = VisiblePosition(firstPositionInOrBeforeNode(innerNode), DOWNSTREAM);
|
| Position pos = visiblePos.deepEquivalent();
|
| @@ -689,7 +694,7 @@ bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e
|
| if (event.event().button() != LeftButton || !targetNode)
|
| return false;
|
|
|
| - RenderObject* renderer = targetNode->renderer();
|
| + RenderObject* renderer = event.hitTestResult().renderer();
|
| if (!renderer) {
|
| Node* parent = EventPathWalker::parent(targetNode);
|
| if (!parent)
|
| @@ -744,6 +749,7 @@ void EventHandler::updateSelectionForMouseDrag(const HitTestResult& hitTestResul
|
| if (!target)
|
| return;
|
|
|
| + RenderObject* targetRenderer = hitTestResult.renderer();
|
| VisiblePosition targetPosition = m_frame->selection()->selection().visiblePositionRespectingEditingBoundary(hitTestResult.localPoint(), target);
|
| // Don't modify the selection if we're not on a node.
|
| if (targetPosition.isNull())
|
| @@ -758,7 +764,7 @@ void EventHandler::updateSelectionForMouseDrag(const HitTestResult& hitTestResul
|
| if (Node* selectionBaseNode = newSelection.base().deprecatedNode())
|
| if (RenderObject* selectionBaseRenderer = selectionBaseNode->renderer())
|
| if (selectionBaseRenderer->isSVGText())
|
| - if (target->renderer()->containingBlock() != selectionBaseRenderer->containingBlock())
|
| + if (targetRenderer->containingBlock() != selectionBaseRenderer->containingBlock())
|
| return;
|
|
|
| if (m_selectionInitiationState == HaveNotStartedSelection && !dispatchSelectStart(target))
|
| @@ -777,11 +783,11 @@ void EventHandler::updateSelectionForMouseDrag(const HitTestResult& hitTestResul
|
| newSelection.setExtent(positionAfterNode(rootUserSelectAllForMousePressNode).downstream(CanCrossEditingBoundary));
|
| } else {
|
| // Reset base for user select all when base is inside user-select-all area and extent < base.
|
| - if (rootUserSelectAllForMousePressNode && comparePositions(target->renderer()->positionForPoint(hitTestResult.localPoint()), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos)) < 0)
|
| + if (rootUserSelectAllForMousePressNode && comparePositions(targetRenderer->positionForPoint(hitTestResult.localPoint()), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos)) < 0)
|
| newSelection.setBase(positionAfterNode(rootUserSelectAllForMousePressNode).downstream(CanCrossEditingBoundary));
|
|
|
| Node* rootUserSelectAllForTarget = Position::rootUserSelectAllForNode(target);
|
| - if (rootUserSelectAllForTarget && m_mousePressNode->renderer() && comparePositions(target->renderer()->positionForPoint(hitTestResult.localPoint()), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos)) < 0)
|
| + if (rootUserSelectAllForTarget && m_mousePressNode->renderer() && comparePositions(targetRenderer->positionForPoint(hitTestResult.localPoint()), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos)) < 0)
|
| newSelection.setExtent(positionBeforeNode(rootUserSelectAllForTarget).upstream(CanCrossEditingBoundary));
|
| else if (rootUserSelectAllForTarget && m_mousePressNode->renderer())
|
| newSelection.setExtent(positionAfterNode(rootUserSelectAllForTarget).downstream(CanCrossEditingBoundary));
|
| @@ -844,11 +850,10 @@ bool EventHandler::handleMouseReleaseEvent(const MouseEventWithHitTestResults& e
|
| && event.event().button() != RightButton) {
|
| VisibleSelection newSelection;
|
| Node* node = event.targetNode();
|
| + RenderObject* renderer = event.hitTestResult().renderer();
|
| bool caretBrowsing = m_frame->settings() && m_frame->settings()->caretBrowsingEnabled();
|
| - if (node && (caretBrowsing || node->rendererIsEditable()) && node->renderer()) {
|
| - VisiblePosition pos = VisiblePosition(node->renderer()->positionForPoint(event.localPoint()));
|
| - newSelection = VisibleSelection(pos);
|
| - }
|
| + if (node && (caretBrowsing || node->rendererIsEditable()) && renderer)
|
| + newSelection = VisibleSelection(VisiblePosition(renderer->positionForPoint(event.localPoint())));
|
|
|
| setSelectionIfNeeded(m_frame->selection(), newSelection);
|
|
|
| @@ -1116,7 +1121,7 @@ OptionalCursor EventHandler::selectCursor(const MouseEventWithHitTestResults& ev
|
| #endif
|
|
|
| Node* node = event.targetNode();
|
| - RenderObject* renderer = node ? node->renderer() : 0;
|
| + RenderObject* renderer = event.hitTestResult().renderer();
|
| RenderStyle* style = renderer ? renderer->style() : 0;
|
| bool horizontalText = !style || style->isHorizontalWritingMode();
|
| const Cursor& iBeam = horizontalText ? iBeamCursor() : verticalTextCursor();
|
| @@ -1343,9 +1348,10 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent)
|
|
|
| m_clickCount = mouseEvent.clickCount();
|
| m_clickNode = mev.targetNode();
|
| + RenderObject* clickRenderer = mev.hitTestResult().renderer();
|
|
|
| if (FrameView* view = m_frame->view()) {
|
| - RenderLayer* layer = m_clickNode->renderer() ? m_clickNode->renderer()->enclosingLayer() : 0;
|
| + RenderLayer* layer = clickRenderer ? clickRenderer->enclosingLayer() : 0;
|
| IntPoint p = view->windowToContents(mouseEvent.position());
|
| if (layer && layer->isPointInResizeControl(p, RenderLayer::ResizerForPointer)) {
|
| layer->setInResizeMode(true);
|
| @@ -3817,7 +3823,7 @@ bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& wheelEvent,
|
| bool EventHandler::passWidgetMouseDownEventToWidget(const MouseEventWithHitTestResults& event)
|
| {
|
| // Figure out which view to send the event to.
|
| - if (!event.targetNode() || !event.targetNode()->renderer() || !event.targetNode()->renderer()->isWidget())
|
| + if (!event.targetNode() || !event.hitTestResult().renderer() || !event.hitTestResult().renderer()->isWidget())
|
| return false;
|
| return false;
|
| }
|
|
|