| Index: Source/core/page/EventHandler.cpp
|
| diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp
|
| index 152e7d648b02736c66848734713d5a32ee8fa969..11b74d59c6d3563d33beb86d986f5dec27879644 100644
|
| --- a/Source/core/page/EventHandler.cpp
|
| +++ b/Source/core/page/EventHandler.cpp
|
| @@ -418,10 +418,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);
|
| @@ -437,10 +438,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()) {
|
| @@ -482,11 +484,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);
|
|
|
| @@ -518,11 +521,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);
|
| @@ -541,7 +545,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.
|
| @@ -557,7 +562,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();
|
| @@ -687,7 +692,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)
|
| @@ -742,6 +747,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())
|
| @@ -756,7 +762,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))
|
| @@ -829,11 +835,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);
|
|
|
| @@ -1101,7 +1106,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();
|
| @@ -1328,9 +1333,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, ResizerForPointer)) {
|
| layer->setInResizeMode(true);
|
| @@ -3825,7 +3831,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;
|
| }
|
|
|