Changeset 150752 in webkit


Ignore:
Timestamp:
May 27, 2013 6:25:48 AM (11 years ago)
Author:
akling@apple.com
Message:

Document::setHoveredNode() should be setHoveredElement().
<http://webkit.org/b/116819>

Reviewed by Antti Koivisto.

Only Elements can be hovered, teach Document about this.

  • dom/Document.h:
  • dom/Document.cpp:

(WebCore::Document::dispose):
(WebCore::Document::detach):

m_hoverNode => m_hoveredElement.
Removed hoverNode() and setHoverNode() since those were only used internally.

(WebCore::Document::updateHoverActiveState):

Updated for hovered things always being Elements.

(WebCore::Document::hoveredElementDidDetach):

  • dom/Element.cpp:

(WebCore::Element::detach):

Renamed Document::hoveredNodeDetached() to hoveredElementDidDetach() and fix it up
following the same pattern as elementInActiveChainDidDetach().

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r150750 r150752  
     12013-05-27  Andreas Kling  <akling@apple.com>
     2
     3        Document::setHoveredNode() should be setHoveredElement().
     4        <http://webkit.org/b/116819>
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Only Elements can be hovered, teach Document about this.
     9
     10        * dom/Document.h:
     11        * dom/Document.cpp:
     12        (WebCore::Document::dispose):
     13        (WebCore::Document::detach):
     14
     15            m_hoverNode => m_hoveredElement.
     16            Removed hoverNode() and setHoverNode() since those were only used internally.
     17
     18        (WebCore::Document::updateHoverActiveState):
     19
     20            Updated for hovered things always being Elements.
     21
     22        (WebCore::Document::hoveredElementDidDetach):
     23        * dom/Element.cpp:
     24        (WebCore::Element::detach):
     25
     26            Renamed Document::hoveredNodeDetached() to hoveredElementDidDetach() and fix it up
     27            following the same pattern as elementInActiveChainDidDetach().
     28
    1292013-05-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>
    230
  • trunk/Source/WebCore/dom/Document.cpp

    r150744 r150752  
    662662    m_docType = 0;
    663663    m_focusedNode = 0;
    664     m_hoverNode = 0;
     664    m_hoveredElement = 0;
    665665    m_activeElement = 0;
    666666    m_titleElement = 0;
     
    21042104#endif
    21052105
    2106     m_hoverNode = 0;
     2106    m_hoveredElement = 0;
    21072107    m_focusedNode = 0;
    21082108    m_activeElement = 0;
     
    32453245}
    32463246
    3247 void Document::setHoverNode(PassRefPtr<Node> newHoverNode)
    3248 {
    3249     m_hoverNode = newHoverNode;
    3250 }
    3251 
    32523247void Document::setActiveElement(PassRefPtr<Element> newActiveElement)
    32533248{
     
    32843279}
    32853280
    3286 void Document::hoveredNodeDetached(Node* node)
    3287 {
    3288     if (!m_hoverNode || (node != m_hoverNode && (!m_hoverNode->isTextNode() || node != m_hoverNode->parentNode())))
    3289         return;
    3290 
    3291     m_hoverNode = node->parentNode();
    3292     while (m_hoverNode && !m_hoverNode->renderer())
    3293         m_hoverNode = m_hoverNode->parentNode();
     3281void Document::hoveredElementDidDetach(Element* element)
     3282{
     3283    if (!m_hoveredElement || element != m_hoveredElement)
     3284        return;
     3285
     3286    m_hoveredElement = element->parentElement();
     3287    while (m_hoveredElement && !m_hoveredElement->renderer())
     3288        m_hoveredElement = m_hoveredElement->parentElement();
    32943289    if (frame())
    32953290        frame()->eventHandler()->scheduleHoverStateUpdate();
     
    59015896    bool mustBeInActiveChain = request.active() && request.move();
    59025897
    5903     RefPtr<Node> oldHoverNode = hoverNode();
     5898    RefPtr<Element> oldHoveredElement = m_hoveredElement.release();
    59045899
    59055900    // A touch release does not set a new hover target; setting the element we're working with to 0
     
    59085903        innerElementInDocument = 0;
    59095904
    5910     // Check to see if the hovered node has changed.
     5905    // Check to see if the hovered Element has changed.
    59115906    // If it hasn't, we do not need to do anything.
    5912     Node* newHoverNode = innerElementInDocument;
    5913     while (newHoverNode && !newHoverNode->renderer())
    5914         newHoverNode = newHoverNode->parentOrShadowHostNode();
    5915 
    5916     // Update our current hover node.
    5917     setHoverNode(newHoverNode);
     5907    Element* newHoveredElement = innerElementInDocument;
     5908    while (newHoveredElement && !newHoveredElement->renderer())
     5909        newHoveredElement = newHoveredElement->parentOrShadowHostElement();
     5910
     5911    m_hoveredElement = newHoveredElement;
    59185912
    59195913    // We have two different objects. Fetch their renderers.
    5920     RenderObject* oldHoverObj = oldHoverNode ? oldHoverNode->renderer() : 0;
    5921     RenderObject* newHoverObj = newHoverNode ? newHoverNode->renderer() : 0;
     5914    RenderObject* oldHoverObj = oldHoveredElement ? oldHoveredElement->renderer() : 0;
     5915    RenderObject* newHoverObj = newHoveredElement ? newHoveredElement->renderer() : 0;
    59225916
    59235917    // Locate the common ancestor render object for the two renderers.
     
    59325926    bool hasCapturingMouseEnterListener = false;
    59335927    bool hasCapturingMouseLeaveListener = false;
    5934     if (event && newHoverNode != oldHoverNode.get()) {
    5935         for (Node* curr = newHoverNode; curr; curr = curr->parentOrShadowHostNode()) {
     5928    if (event && newHoveredElement != oldHoveredElement.get()) {
     5929        for (Node* curr = newHoveredElement; curr; curr = curr->parentOrShadowHostNode()) {
    59365930            if (curr->hasCapturingEventListeners(eventNames().mouseenterEvent)) {
    59375931                hasCapturingMouseEnterListener = true;
     
    59395933            }
    59405934        }
    5941         for (Node* curr = oldHoverNode.get(); curr; curr = curr->parentOrShadowHostNode()) {
     5935        for (Node* curr = oldHoveredElement.get(); curr; curr = curr->parentOrShadowHostNode()) {
    59425936            if (curr->hasCapturingEventListeners(eventNames().mouseleaveEvent)) {
    59435937                hasCapturingMouseLeaveListener = true;
     
    59565950        }
    59575951        // Unset hovered nodes in sub frame documents if the old hovered node was a frame owner.
    5958         if (oldHoverNode && oldHoverNode->isFrameOwnerElement()) {
    5959             if (Document* contentDocument = toFrameOwnerElement(oldHoverNode.get())->contentDocument())
     5952        if (oldHoveredElement && oldHoveredElement->isFrameOwnerElement()) {
     5953            if (Document* contentDocument = toFrameOwnerElement(oldHoveredElement.get())->contentDocument())
    59605954                contentDocument->updateHoverActiveState(request, 0);
    59615955        }
     
    59755969            toElement(nodesToRemoveFromChain[i].get())->setHovered(false);
    59765970        if (event && (hasCapturingMouseLeaveListener || nodesToRemoveFromChain[i]->hasEventListeners(eventNames().mouseleaveEvent)))
    5977             nodesToRemoveFromChain[i]->dispatchMouseEvent(*event, eventNames().mouseleaveEvent, 0, newHoverNode);
     5971            nodesToRemoveFromChain[i]->dispatchMouseEvent(*event, eventNames().mouseleaveEvent, 0, newHoveredElement);
    59785972    }
    59795973
     
    59905984                toElement(nodesToAddToChain[i].get())->setHovered(true);
    59915985            if (event && (hasCapturingMouseEnterListener || nodesToAddToChain[i]->hasEventListeners(eventNames().mouseenterEvent)))
    5992                 nodesToAddToChain[i]->dispatchMouseEvent(*event, eventNames().mouseenterEvent, 0, oldHoverNode.get());
     5986                nodesToAddToChain[i]->dispatchMouseEvent(*event, eventNames().mouseenterEvent, 0, oldHoveredElement.get());
    59935987        }
    59945988    }
  • trunk/Source/WebCore/dom/Document.h

    r150744 r150752  
    681681    void setIgnoreAutofocus(bool shouldIgnore = true) { m_ignoreAutofocus = shouldIgnore; };
    682682
    683     void setHoverNode(PassRefPtr<Node>);
    684     Node* hoverNode() const { return m_hoverNode.get(); }
    685 
    686683    void setActiveElement(PassRefPtr<Element>);
    687684    Element* activeElement() const { return m_activeElement.get(); }
     
    689686    void focusedNodeRemoved();
    690687    void removeFocusedNodeOfSubtree(Node*, bool amongChildrenOnly = false);
    691     void hoveredNodeDetached(Node*);
     688    void hoveredElementDidDetach(Element*);
    692689    void elementInActiveChainDidDetach(Element*);
    693690
     
    13501347
    13511348    RefPtr<Node> m_focusedNode;
    1352     RefPtr<Node> m_hoverNode;
     1349    RefPtr<Element> m_hoveredElement;
    13531350    RefPtr<Element> m_activeElement;
    13541351    RefPtr<Element> m_documentElement;
  • trunk/Source/WebCore/dom/Element.cpp

    r150744 r150752  
    14781478    if (isUserActionElement()) {
    14791479        if (hovered())
    1480             document()->hoveredNodeDetached(this);
     1480            document()->hoveredElementDidDetach(this);
    14811481        if (inActiveChain())
    14821482            document()->elementInActiveChainDidDetach(this);
Note: See TracChangeset for help on using the changeset viewer.