Changeset 150752 in webkit
- Timestamp:
- May 27, 2013 6:25:48 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r150750 r150752 1 2013-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 1 29 2013-05-27 Allan Sandfeld Jensen <allan.jensen@digia.com> 2 30 -
trunk/Source/WebCore/dom/Document.cpp
r150744 r150752 662 662 m_docType = 0; 663 663 m_focusedNode = 0; 664 m_hover Node= 0;664 m_hoveredElement = 0; 665 665 m_activeElement = 0; 666 666 m_titleElement = 0; … … 2104 2104 #endif 2105 2105 2106 m_hover Node= 0;2106 m_hoveredElement = 0; 2107 2107 m_focusedNode = 0; 2108 2108 m_activeElement = 0; … … 3245 3245 } 3246 3246 3247 void Document::setHoverNode(PassRefPtr<Node> newHoverNode)3248 {3249 m_hoverNode = newHoverNode;3250 }3251 3252 3247 void Document::setActiveElement(PassRefPtr<Element> newActiveElement) 3253 3248 { … … 3284 3279 } 3285 3280 3286 void Document::hovered NodeDetached(Node* node)3287 { 3288 if (!m_hover Node || (node != m_hoverNode && (!m_hoverNode->isTextNode() || node != m_hoverNode->parentNode())))3289 return; 3290 3291 m_hover Node = node->parentNode();3292 while (m_hover Node && !m_hoverNode->renderer())3293 m_hover Node = m_hoverNode->parentNode();3281 void 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(); 3294 3289 if (frame()) 3295 3290 frame()->eventHandler()->scheduleHoverStateUpdate(); … … 5901 5896 bool mustBeInActiveChain = request.active() && request.move(); 5902 5897 5903 RefPtr< Node> oldHoverNode = hoverNode();5898 RefPtr<Element> oldHoveredElement = m_hoveredElement.release(); 5904 5899 5905 5900 // A touch release does not set a new hover target; setting the element we're working with to 0 … … 5908 5903 innerElementInDocument = 0; 5909 5904 5910 // Check to see if the hovered nodehas changed.5905 // Check to see if the hovered Element has changed. 5911 5906 // 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; 5918 5912 5919 5913 // We have two different objects. Fetch their renderers. 5920 RenderObject* oldHoverObj = oldHover Node ? oldHoverNode->renderer() : 0;5921 RenderObject* newHoverObj = newHover Node ? newHoverNode->renderer() : 0;5914 RenderObject* oldHoverObj = oldHoveredElement ? oldHoveredElement->renderer() : 0; 5915 RenderObject* newHoverObj = newHoveredElement ? newHoveredElement->renderer() : 0; 5922 5916 5923 5917 // Locate the common ancestor render object for the two renderers. … … 5932 5926 bool hasCapturingMouseEnterListener = false; 5933 5927 bool hasCapturingMouseLeaveListener = false; 5934 if (event && newHover Node != oldHoverNode.get()) {5935 for (Node* curr = newHover Node; curr; curr = curr->parentOrShadowHostNode()) {5928 if (event && newHoveredElement != oldHoveredElement.get()) { 5929 for (Node* curr = newHoveredElement; curr; curr = curr->parentOrShadowHostNode()) { 5936 5930 if (curr->hasCapturingEventListeners(eventNames().mouseenterEvent)) { 5937 5931 hasCapturingMouseEnterListener = true; … … 5939 5933 } 5940 5934 } 5941 for (Node* curr = oldHover Node.get(); curr; curr = curr->parentOrShadowHostNode()) {5935 for (Node* curr = oldHoveredElement.get(); curr; curr = curr->parentOrShadowHostNode()) { 5942 5936 if (curr->hasCapturingEventListeners(eventNames().mouseleaveEvent)) { 5943 5937 hasCapturingMouseLeaveListener = true; … … 5956 5950 } 5957 5951 // Unset hovered nodes in sub frame documents if the old hovered node was a frame owner. 5958 if (oldHover Node && oldHoverNode->isFrameOwnerElement()) {5959 if (Document* contentDocument = toFrameOwnerElement(oldHover Node.get())->contentDocument())5952 if (oldHoveredElement && oldHoveredElement->isFrameOwnerElement()) { 5953 if (Document* contentDocument = toFrameOwnerElement(oldHoveredElement.get())->contentDocument()) 5960 5954 contentDocument->updateHoverActiveState(request, 0); 5961 5955 } … … 5975 5969 toElement(nodesToRemoveFromChain[i].get())->setHovered(false); 5976 5970 if (event && (hasCapturingMouseLeaveListener || nodesToRemoveFromChain[i]->hasEventListeners(eventNames().mouseleaveEvent))) 5977 nodesToRemoveFromChain[i]->dispatchMouseEvent(*event, eventNames().mouseleaveEvent, 0, newHover Node);5971 nodesToRemoveFromChain[i]->dispatchMouseEvent(*event, eventNames().mouseleaveEvent, 0, newHoveredElement); 5978 5972 } 5979 5973 … … 5990 5984 toElement(nodesToAddToChain[i].get())->setHovered(true); 5991 5985 if (event && (hasCapturingMouseEnterListener || nodesToAddToChain[i]->hasEventListeners(eventNames().mouseenterEvent))) 5992 nodesToAddToChain[i]->dispatchMouseEvent(*event, eventNames().mouseenterEvent, 0, oldHover Node.get());5986 nodesToAddToChain[i]->dispatchMouseEvent(*event, eventNames().mouseenterEvent, 0, oldHoveredElement.get()); 5993 5987 } 5994 5988 } -
trunk/Source/WebCore/dom/Document.h
r150744 r150752 681 681 void setIgnoreAutofocus(bool shouldIgnore = true) { m_ignoreAutofocus = shouldIgnore; }; 682 682 683 void setHoverNode(PassRefPtr<Node>);684 Node* hoverNode() const { return m_hoverNode.get(); }685 686 683 void setActiveElement(PassRefPtr<Element>); 687 684 Element* activeElement() const { return m_activeElement.get(); } … … 689 686 void focusedNodeRemoved(); 690 687 void removeFocusedNodeOfSubtree(Node*, bool amongChildrenOnly = false); 691 void hovered NodeDetached(Node*);688 void hoveredElementDidDetach(Element*); 692 689 void elementInActiveChainDidDetach(Element*); 693 690 … … 1350 1347 1351 1348 RefPtr<Node> m_focusedNode; 1352 RefPtr< Node> m_hoverNode;1349 RefPtr<Element> m_hoveredElement; 1353 1350 RefPtr<Element> m_activeElement; 1354 1351 RefPtr<Element> m_documentElement; -
trunk/Source/WebCore/dom/Element.cpp
r150744 r150752 1478 1478 if (isUserActionElement()) { 1479 1479 if (hovered()) 1480 document()->hovered NodeDetached(this);1480 document()->hoveredElementDidDetach(this); 1481 1481 if (inActiveChain()) 1482 1482 document()->elementInActiveChainDidDetach(this);
Note: See TracChangeset
for help on using the changeset viewer.