Changeset 125715 in webkit


Ignore:
Timestamp:
Aug 15, 2012 3:14:05 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Refactoring: move EventHandler::targetNode into HitTestResult
https://bugs.webkit.org/show_bug.cgi?id=94107

Patch by Iain Merrick <husky@chromium.org> on 2012-08-15
Reviewed by Dimitri Glazkov.

Source/WebCore:

This static helper method in EventHandler was made public so that
WebFrameImpl can call it. That's untidy because EventHandler isn't
really involved. This patch turns it into an instance method of
HitTestResult (with a wrapper in MouseEventWithHitTestResult for
convenience).

Pure refactoring, no behavior change, no new test needed.

  • page/EventHandler.cpp:

(WebCore::EventHandler::selectClosestWordFromMouseEvent):
(WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
(WebCore::EventHandler::handleMousePressEventTripleClick):
(WebCore::EventHandler::handleMousePressEventSingleClick):
(WebCore::EventHandler::handleMousePressEvent):
(WebCore::EventHandler::handleMouseDraggedEvent):
(WebCore::EventHandler::updateSelectionForMouseDrag):
(WebCore::EventHandler::handleMouseReleaseEvent):
(WebCore::EventHandler::subframeForHitTestResult):
(WebCore::EventHandler::selectCursor):
(WebCore::EventHandler::handleMouseDoubleClickEvent):
(WebCore::EventHandler::handleMouseMoveEvent):
(WebCore::EventHandler::updateDragAndDrop):
(WebCore::EventHandler::handleGestureEvent):
(WebCore::EventHandler::sendContextMenuEvent):

  • page/EventHandler.h:

(EventHandler):

  • page/MouseEventWithHitTestResults.h:

(WebCore::MouseEventWithHitTestResults::targetNode):

  • page/chromium/EventHandlerChromium.cpp:

(WebCore::EventHandler::passMousePressEventToSubframe):
(WebCore::EventHandler::passWidgetMouseDownEventToWidget):

  • page/efl/EventHandlerEfl.cpp:

(WebCore::EventHandler::passWidgetMouseDownEventToWidget):

  • page/gtk/EventHandlerGtk.cpp:

(WebCore::EventHandler::passWidgetMouseDownEventToWidget):

  • page/mac/EventHandlerMac.mm:

(WebCore::EventHandler::passWidgetMouseDownEventToWidget):
(WebCore::EventHandler::passSubframeEventToSubframe):

  • page/wx/EventHandlerWx.cpp:

(WebCore::EventHandler::passWidgetMouseDownEventToWidget):

  • rendering/HitTestResult.cpp:

(WebCore::HitTestResult::targetNode):
(WebCore):

  • rendering/HitTestResult.h:

(HitTestResult):

Source/WebKit/chromium:

This static helper method in EventHandler was made public so that
WebFrameImpl can call it. That's untidy because EventHandler isn't
really involved. This patch turns it into an instance method of
HitTestResult (with a wrapper in MouseEventWithHitTestResult for
convenience).

Pure refactoring, no behavior change, no new test needed.

  • src/WebFrameImpl.cpp:

(WebKit::WebFrameImpl::visiblePositionForWindowPoint):

Location:
trunk/Source
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r125713 r125715  
     12012-08-15  Iain Merrick  <husky@chromium.org>
     2
     3        Refactoring: move EventHandler::targetNode into HitTestResult
     4        https://bugs.webkit.org/show_bug.cgi?id=94107
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        This static helper method in EventHandler was made public so that
     9        WebFrameImpl can call it. That's untidy because EventHandler isn't
     10        really involved. This patch turns it into an instance method of
     11        HitTestResult (with a wrapper in MouseEventWithHitTestResult for
     12        convenience).
     13   
     14        Pure refactoring, no behavior change, no new test needed.
     15
     16        * page/EventHandler.cpp:
     17        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
     18        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
     19        (WebCore::EventHandler::handleMousePressEventTripleClick):
     20        (WebCore::EventHandler::handleMousePressEventSingleClick):
     21        (WebCore::EventHandler::handleMousePressEvent):
     22        (WebCore::EventHandler::handleMouseDraggedEvent):
     23        (WebCore::EventHandler::updateSelectionForMouseDrag):
     24        (WebCore::EventHandler::handleMouseReleaseEvent):
     25        (WebCore::EventHandler::subframeForHitTestResult):
     26        (WebCore::EventHandler::selectCursor):
     27        (WebCore::EventHandler::handleMouseDoubleClickEvent):
     28        (WebCore::EventHandler::handleMouseMoveEvent):
     29        (WebCore::EventHandler::updateDragAndDrop):
     30        (WebCore::EventHandler::handleGestureEvent):
     31        (WebCore::EventHandler::sendContextMenuEvent):
     32        * page/EventHandler.h:
     33        (EventHandler):
     34        * page/MouseEventWithHitTestResults.h:
     35        (WebCore::MouseEventWithHitTestResults::targetNode):
     36        * page/chromium/EventHandlerChromium.cpp:
     37        (WebCore::EventHandler::passMousePressEventToSubframe):
     38        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
     39        * page/efl/EventHandlerEfl.cpp:
     40        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
     41        * page/gtk/EventHandlerGtk.cpp:
     42        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
     43        * page/mac/EventHandlerMac.mm:
     44        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
     45        (WebCore::EventHandler::passSubframeEventToSubframe):
     46        * page/wx/EventHandlerWx.cpp:
     47        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
     48        * rendering/HitTestResult.cpp:
     49        (WebCore::HitTestResult::targetNode):
     50        (WebCore):
     51        * rendering/HitTestResult.h:
     52        (HitTestResult):
     53
    1542012-08-15  David Grogan  <dgrogan@chromium.org>
    255
  • trunk/Source/WebCore/page/EventHandler.cpp

    r125615 r125715  
    418418void EventHandler::selectClosestWordFromMouseEvent(const MouseEventWithHitTestResults& result)
    419419{
    420     Node* innerNode = targetNode(result);
     420    Node* innerNode = result.targetNode();
    421421    VisibleSelection newSelection;
    422422
     
    440440        return selectClosestWordFromMouseEvent(result);
    441441
    442     Node* innerNode = targetNode(result);
     442    Node* innerNode = result.targetNode();
    443443
    444444    if (innerNode && innerNode->renderer() && m_mouseDownMayStartSelect) {
     
    476476        return false;
    477477   
    478     Node* innerNode = targetNode(event);
     478    Node* innerNode = event.targetNode();
    479479    if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect))
    480480        return false;
     
    499499{
    500500    m_frame->document()->updateLayoutIgnorePendingStylesheets();
    501     Node* innerNode = targetNode(event);
     501    Node* innerNode = event.targetNode();
    502502    if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect))
    503503        return false;
     
    581581    // If we got the event back, that must mean it wasn't prevented,
    582582    // so it's allowed to start a drag or selection.
    583     m_mouseDownMayStartSelect = canMouseDownStartSelect(targetNode(event));
     583    m_mouseDownMayStartSelect = canMouseDownStartSelect(event.targetNode());
    584584   
    585585#if ENABLE(DRAG_SUPPORT)
     
    611611        focusDocumentView();
    612612
    613     Node* innerNode = targetNode(event);
     613    Node* innerNode = event.targetNode();
    614614
    615615    m_mousePressNode = innerNode;
     
    668668        return false;
    669669
    670     Node* targetNode = EventHandler::targetNode(event);
     670    Node* targetNode = event.targetNode();
    671671    if (event.event().button() != LeftButton || !targetNode)
    672672        return false;
     
    783783        return;
    784784
    785     Node* target = targetNode(hitTestResult);
     785    Node* target = hitTestResult.targetNode();
    786786    if (!target)
    787787        return;
     
    876876            && event.event().button() != RightButton) {
    877877        VisibleSelection newSelection;
    878         Node* node = targetNode(event);
     878        Node* node = event.targetNode();
    879879        bool caretBrowsing = m_frame->settings() && m_frame->settings()->caretBrowsingEnabled();
    880880        if (node && (caretBrowsing || node->rendererIsEditable()) && node->renderer()) {
     
    12511251    if (!hitTestResult.isOverWidget())
    12521252        return 0;
    1253     return subframeForTargetNode(targetNode(hitTestResult));
     1253    return subframeForTargetNode(hitTestResult.targetNode());
    12541254}
    12551255
     
    12921292        return NoCursorChange;
    12931293
    1294     Node* node = targetNode(event);
     1294    Node* node = event.targetNode();
    12951295    RenderObject* renderer = node ? node->renderer() : 0;
    12961296    RenderStyle* style = renderer ? renderer->style() : 0;
     
    14621462}
    14631463
    1464 Node* EventHandler::targetNode(const MouseEventWithHitTestResults& event)
    1465 {
    1466     return targetNode(event.hitTestResult());
    1467 }
    1468 
    1469 Node* EventHandler::targetNode(const HitTestResult& hitTestResult)
    1470 {
    1471     Node* node = hitTestResult.innerNode();
    1472     if (!node)
    1473         return 0;
    1474     if (node->inDocument())
    1475         return node;
    1476 
    1477     Element* element = node->parentElement();
    1478     if (element && element->inDocument())
    1479         return element;
    1480 
    1481     return node;
    1482 
    1483 }
    1484 
    14851464bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent)
    14861465{
     
    15281507    MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent);
    15291508
    1530     if (!targetNode(mev)) {
     1509    if (!mev.targetNode()) {
    15311510        invalidateClick();
    15321511        return false;
    15331512    }
    15341513
    1535     m_mousePressNode = targetNode(mev);
     1514    m_mousePressNode = mev.targetNode();
    15361515
    15371516    Frame* subframe = subframeForHitTestResult(mev);
     
    15411520        m_capturesDragging = subframe->eventHandler()->capturesDragging();
    15421521        if (m_mousePressed && m_capturesDragging) {
    1543             m_capturingMouseEventsNode = targetNode(mev);
     1522            m_capturingMouseEventsNode = mev.targetNode();
    15441523            m_eventHandlerWillResetCapturingMouseEventsNode = true;
    15451524        }
     
    15631542
    15641543    m_clickCount = mouseEvent.clickCount();
    1565     m_clickNode = targetNode(mev);
     1544    m_clickNode = mev.targetNode();
    15661545
    15671546    if (FrameView* view = m_frame->view()) {
     
    15791558    m_frame->selection()->setCaretBlinkingSuspended(true);
    15801559
    1581     bool swallowEvent = dispatchMouseEvent(eventNames().mousedownEvent, targetNode(mev), true, m_clickCount, mouseEvent, true);
     1560    bool swallowEvent = dispatchMouseEvent(eventNames().mousedownEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true);
    15821561    m_capturesDragging = !swallowEvent || mev.scrollbar();
    15831562
     
    16051584        // we'd like to EventHandler::handleMousePressEvent to pass the event to the widget and thus the
    16061585        // event target node can't still be the shadow node.
    1607         if (targetNode(mev)->isShadowRoot() && toShadowRoot(targetNode(mev))->host()->hasTagName(inputTag)) {
     1586        if (mev.targetNode()->isShadowRoot() && toShadowRoot(mev.targetNode())->host()->hasTagName(inputTag)) {
    16081587            HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active);
    16091588            mev = m_frame->document()->prepareMouseEvent(request, documentPoint, mouseEvent);
     
    16471626
    16481627    m_clickCount = mouseEvent.clickCount();
    1649     bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, targetNode(mev), true, m_clickCount, mouseEvent, false);
    1650 
    1651     bool swallowClickEvent = mouseEvent.button() != RightButton && targetNode(mev) == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, targetNode(mev), true, m_clickCount, mouseEvent, true);
     1628    bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, mev.targetNode(), true, m_clickCount, mouseEvent, false);
     1629
     1630    bool swallowClickEvent = mouseEvent.button() != RightButton && mev.targetNode() == m_clickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true);
    16521631
    16531632    if (m_lastScrollbarUnderMouse)
     
    17981777    if (newSubframe) {
    17991778        // Update over/out state before passing the event to the subframe.
    1800         updateMouseEventTargetNode(targetNode(mev), mouseEvent, true);
     1779        updateMouseEventTargetNode(mev.targetNode(), mouseEvent, true);
    18011780       
    18021781        // Event dispatch in updateMouseEventTargetNode may have caused the subframe of the target
     
    18191798        return true;
    18201799   
    1821     swallowEvent = dispatchMouseEvent(eventNames().mousemoveEvent, targetNode(mev), false, 0, mouseEvent, true);
     1800    swallowEvent = dispatchMouseEvent(eventNames().mousemoveEvent, mev.targetNode(), false, 0, mouseEvent, true);
    18221801#if ENABLE(DRAG_SUPPORT)
    18231802    if (!swallowEvent)
     
    18811860        return true;
    18821861
    1883     bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, targetNode(mev), true, m_clickCount, mouseEvent, false);
    1884 
    1885     Node* clickTarget = targetNode(mev);
     1862    bool swallowMouseUpEvent = dispatchMouseEvent(eventNames().mouseupEvent, mev.targetNode(), true, m_clickCount, mouseEvent, false);
     1863
     1864    Node* clickTarget = mev.targetNode();
    18861865    if (clickTarget)
    18871866        clickTarget = clickTarget->shadowAncestorNode();
    18881867    Node* adjustedClickNode = m_clickNode ? m_clickNode->shadowAncestorNode() : 0;
    18891868
    1890     bool swallowClickEvent = m_clickCount > 0 && mouseEvent.button() != RightButton && clickTarget == adjustedClickNode && dispatchMouseEvent(eventNames().clickEvent, targetNode(mev), true, m_clickCount, mouseEvent, true);
     1869    bool swallowClickEvent = m_clickCount > 0 && mouseEvent.button() != RightButton && clickTarget == adjustedClickNode && dispatchMouseEvent(eventNames().clickEvent, mev.targetNode(), true, m_clickCount, mouseEvent, true);
    18911870
    18921871    if (m_resizeLayer) {
     
    19881967
    19891968    // Drag events should never go to text nodes (following IE, and proper mouseover/out dispatch)
    1990     RefPtr<Node> newTarget = targetNode(mev);
     1969    RefPtr<Node> newTarget = mev.targetNode();
    19911970    if (newTarget && newTarget->isTextNode())
    19921971        newTarget = newTarget->parentNode();
     
    24262405    if (!eventTarget) {
    24272406        HitTestResult result = hitTestResultAtPoint(gestureEvent.position(), false, false, DontHitTestScrollbars, HitTestRequest::ReadOnly | HitTestRequest::Active);
    2428         eventTarget = targetNode(result);
     2407        eventTarget = result.targetNode();
    24292408    }
    24302409
     
    25812560        // If the selection is non-editable, we do word selection to make it easier to use the contextual menu items
    25822561        // available for text selections.  But only if we're above text.
    2583         && (m_frame->selection()->isContentEditable() || (targetNode(mev) && targetNode(mev)->isTextNode()))) {
     2562        && (m_frame->selection()->isContentEditable() || (mev.targetNode() && mev.targetNode()->isTextNode()))) {
    25842563        m_mouseDownMayStartSelect = true; // context menu events are always allowed to perform a selection
    25852564        selectClosestWordOrLinkFromMouseEvent(mev);
    25862565    }
    25872566
    2588     swallowEvent = dispatchMouseEvent(eventNames().contextmenuEvent, targetNode(mev), true, 0, event, false);
     2567    swallowEvent = dispatchMouseEvent(eventNames().contextmenuEvent, mev.targetNode(), true, 0, event, false);
    25892568   
    25902569    return swallowEvent;
  • trunk/Source/WebCore/page/EventHandler.h

    r125329 r125715  
    231231#endif
    232232
    233     static Node* targetNode(const HitTestResult&);
    234 
    235233private:
    236234#if ENABLE(DRAG_SUPPORT)
     
    247245
    248246    bool handleMouseDoubleClickEvent(const PlatformMouseEvent&);
    249 
    250     static Node* targetNode(const MouseEventWithHitTestResults&);
    251247
    252248    bool handleMousePressEvent(const MouseEventWithHitTestResults&);
  • trunk/Source/WebCore/page/MouseEventWithHitTestResults.h

    r96566 r125715  
    3939    bool isOverLink() const;
    4040    bool isOverWidget() const { return m_hitTestResult.isOverWidget(); }
     41    Node* targetNode() const { return m_hitTestResult.targetNode(); }
    4142
    4243private:
  • trunk/Source/WebCore/page/chromium/EventHandlerChromium.cpp

    r122399 r125715  
    6262    if (m_frame->selection()->contains(p)) {
    6363        VisiblePosition visiblePos(
    64             targetNode(mev)->renderer()->positionForPoint(mev.localPoint()));
     64            mev.targetNode()->renderer()->positionForPoint(mev.localPoint()));
    6565        VisibleSelection newSelection(visiblePos);
    6666        if (m_frame->selection()->shouldChangeSelection(newSelection))
     
    104104{
    105105    // Figure out which view to send the event to.
    106     if (!targetNode(event) || !targetNode(event)->renderer() || !targetNode(event)->renderer()->isWidget())
     106    if (!event.targetNode() || !event.targetNode()->renderer() || !event.targetNode()->renderer()->isWidget())
    107107        return false;
    108     return passMouseDownEventToWidget(toRenderWidget(targetNode(event)->renderer())->widget());
     108    return passMouseDownEventToWidget(toRenderWidget(event.targetNode()->renderer())->widget());
    109109}
    110110
  • trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp

    r115318 r125715  
    6464bool EventHandler::passWidgetMouseDownEventToWidget(const MouseEventWithHitTestResults& event)
    6565{
    66     RenderObject* target = targetNode(event) ? targetNode(event)->renderer() : 0;
     66    RenderObject* target = event.targetNode() ? event.targetNode()->renderer() : 0;
    6767
    6868    if (!target || !target->isWidget())
  • trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp

    r122399 r125715  
    6060{
    6161    // Figure out which view to send the event to.
    62     RenderObject* target = targetNode(event) ? targetNode(event)->renderer() : 0;
     62    RenderObject* target = event.targetNode() ? event.targetNode()->renderer() : 0;
    6363    if (!target || !target->isWidget())
    6464        return false;
  • trunk/Source/WebCore/page/mac/EventHandlerMac.mm

    r117695 r125715  
    139139{
    140140    // Figure out which view to send the event to.
    141     RenderObject* target = targetNode(event) ? targetNode(event)->renderer() : 0;
     141    RenderObject* target = event.targetNode() ? event.targetNode()->renderer() : 0;
    142142    if (!target || !target->isWidget())
    143143        return false;
     
    353353       
    354354        case NSLeftMouseDown: {
    355             Node* node = targetNode(event);
     355            Node* node = event.targetNode();
    356356            if (!node)
    357357                return false;
  • trunk/Source/WebCore/page/wx/EventHandlerWx.cpp

    r103196 r125715  
    6464{
    6565    // Figure out which view to send the event to.
    66     if (!targetNode(event) || !targetNode(event)->renderer() || !targetNode(event)->renderer()->isWidget())
     66    if (!event.targetNode() || !event.targetNode()->renderer() || !event.targetNode()->renderer()->isWidget())
    6767        return false;
    6868   
    69     return passMouseDownEventToWidget(toRenderWidget(targetNode(event)->renderer())->widget());
     69    return passMouseDownEventToWidget(toRenderWidget(event.targetNode()->renderer())->widget());
    7070}
    7171
  • trunk/Source/WebCore/rendering/HitTestResult.cpp

    r125306 r125715  
    796796}
    797797
     798Node* HitTestResult::targetNode() const
     799{
     800    Node* node = innerNode();
     801    if (!node)
     802        return 0;
     803    if (node->inDocument())
     804        return node;
     805
     806    Element* element = node->parentElement();
     807    if (element && element->inDocument())
     808        return element;
     809
     810    return node;
     811}
     812
    798813} // namespace WebCore
  • trunk/Source/WebCore/rendering/HitTestResult.h

    r123754 r125715  
    178178    Vector<String> dictationAlternatives() const;
    179179
     180    Node* targetNode() const;
     181
    180182private:
    181183    NodeSet& mutableRectBasedTestResult(); // See above.
  • trunk/Source/WebKit/chromium/ChangeLog

    r125713 r125715  
     12012-08-15  Iain Merrick  <husky@chromium.org>
     2
     3        Refactoring: move EventHandler::targetNode into HitTestResult
     4        https://bugs.webkit.org/show_bug.cgi?id=94107
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        This static helper method in EventHandler was made public so that
     9        WebFrameImpl can call it. That's untidy because EventHandler isn't
     10        really involved. This patch turns it into an instance method of
     11        HitTestResult (with a wrapper in MouseEventWithHitTestResult for
     12        convenience).
     13
     14        Pure refactoring, no behavior change, no new test needed.
     15
     16        * src/WebFrameImpl.cpp:
     17        (WebKit::WebFrameImpl::visiblePositionForWindowPoint):
     18
    1192012-08-15  David Grogan  <dgrogan@chromium.org>
    220
  • trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp

    r125615 r125715  
    15041504    frame()->document()->renderView()->layer()->hitTest(request, result);
    15051505
    1506     Node* node = EventHandler::targetNode(result);
     1506    Node* node = result.targetNode();
    15071507    if (!node)
    15081508        return VisiblePosition();
Note: See TracChangeset for help on using the changeset viewer.