OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. |
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) |
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
(...skipping 1744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1755 } | 1755 } |
1756 } | 1756 } |
1757 | 1757 |
1758 // If we wanted to call implicitClose() during recalcStyle, do so now that w e're finished. | 1758 // If we wanted to call implicitClose() during recalcStyle, do so now that w e're finished. |
1759 if (m_closeAfterStyleRecalc) { | 1759 if (m_closeAfterStyleRecalc) { |
1760 m_closeAfterStyleRecalc = false; | 1760 m_closeAfterStyleRecalc = false; |
1761 implicitClose(); | 1761 implicitClose(); |
1762 } | 1762 } |
1763 | 1763 |
1764 InspectorInstrumentation::didRecalculateStyle(cookie); | 1764 InspectorInstrumentation::didRecalculateStyle(cookie); |
1765 | |
1766 // As a result of the style recalculation, the currently hovered element mig ht have been | |
1767 // detached (for example, by setting display:none in the :hover style), sche dule another mouseMove event | |
1768 // to check if any other elements ended up under the mouse pointer due to re -layout. | |
1769 if (hoverNode() && !hoverNode()->renderer() && frame()) | |
1770 frame()->eventHandler()->dispatchFakeMouseMoveEventSoon(); | |
ojan
2013/06/23 17:58:11
To my surprised, firing the fake mouse move events
| |
1765 } | 1771 } |
1766 | 1772 |
1767 void Document::updateStyleIfNeeded() | 1773 void Document::updateStyleIfNeeded() |
1768 { | 1774 { |
1769 ASSERT(isMainThread()); | 1775 ASSERT(isMainThread()); |
1770 ASSERT(!view() || (!view()->isInLayout() && !view()->isPainting())); | 1776 ASSERT(!view() || (!view()->isInLayout() && !view()->isPainting())); |
1771 | 1777 |
1772 if (!m_pendingStyleRecalcShouldForce && !childNeedsStyleRecalc()) | 1778 if (!m_pendingStyleRecalcShouldForce && !childNeedsStyleRecalc()) |
1773 return; | 1779 return; |
1774 | 1780 |
(...skipping 3271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5046 RenderObject* newHoverObj = newHoverNode ? newHoverNode->renderer() : 0; | 5052 RenderObject* newHoverObj = newHoverNode ? newHoverNode->renderer() : 0; |
5047 | 5053 |
5048 // Locate the common ancestor render object for the two renderers. | 5054 // Locate the common ancestor render object for the two renderers. |
5049 RenderObject* ancestor = nearestCommonHoverAncestor(oldHoverObj, newHoverObj ); | 5055 RenderObject* ancestor = nearestCommonHoverAncestor(oldHoverObj, newHoverObj ); |
5050 | 5056 |
5051 Vector<RefPtr<Node>, 32> nodesToRemoveFromChain; | 5057 Vector<RefPtr<Node>, 32> nodesToRemoveFromChain; |
5052 Vector<RefPtr<Node>, 32> nodesToAddToChain; | 5058 Vector<RefPtr<Node>, 32> nodesToAddToChain; |
5053 | 5059 |
5054 if (oldHoverObj != newHoverObj) { | 5060 if (oldHoverObj != newHoverObj) { |
5055 // If the old hovered node is not nil but it's renderer is, it was proba bly detached as part of the :hover style | 5061 // If the old hovered node is not nil but it's renderer is, it was proba bly detached as part of the :hover style |
5056 // (for instance by setting display:none in the :hover pseudo-class). In this case, the old hovered element | 5062 // (for instance by setting display:none in the :hover pseudo-class). In this case, the old hovered element (and its ancestors) |
5057 // must be updated, to ensure it's normal style is re-applied. | 5063 // must be updated, to ensure it's normal style is re-applied. |
5058 if (oldHoverNode && !oldHoverObj) { | 5064 if (oldHoverNode && !oldHoverObj) { |
5059 if (!mustBeInActiveChain || oldHoverNode->inActiveChain()) | 5065 for (Node* node = oldHoverNode.get(); node; node = node->parentNode( )) { |
5060 nodesToRemoveFromChain.append(oldHoverNode); | 5066 if (!mustBeInActiveChain || (node->isElementNode() && toElement( node)->inActiveChain())) |
5067 nodesToRemoveFromChain.append(node); | |
5068 } | |
5069 | |
5061 } | 5070 } |
5062 | 5071 |
5063 // The old hover path only needs to be cleared up to (and not including) the common ancestor; | 5072 // The old hover path only needs to be cleared up to (and not including) the common ancestor; |
5064 for (RenderObject* curr = oldHoverObj; curr && curr != ancestor; curr = curr->hoverAncestor()) { | 5073 for (RenderObject* curr = oldHoverObj; curr && curr != ancestor; curr = curr->hoverAncestor()) { |
5065 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr ->node()->inActiveChain())) | 5074 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr ->node()->inActiveChain())) |
5066 nodesToRemoveFromChain.append(curr->node()); | 5075 nodesToRemoveFromChain.append(curr->node()); |
5067 } | 5076 } |
5068 } | 5077 } |
5069 | 5078 |
5070 // Now set the hover state for our new object up to the root. | 5079 // Now set the hover state for our new object up to the root. |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5233 { | 5242 { |
5234 return DocumentLifecycleNotifier::create(this); | 5243 return DocumentLifecycleNotifier::create(this); |
5235 } | 5244 } |
5236 | 5245 |
5237 DocumentLifecycleNotifier* Document::lifecycleNotifier() | 5246 DocumentLifecycleNotifier* Document::lifecycleNotifier() |
5238 { | 5247 { |
5239 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec ycleNotifier()); | 5248 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec ycleNotifier()); |
5240 } | 5249 } |
5241 | 5250 |
5242 } // namespace WebCore | 5251 } // namespace WebCore |
OLD | NEW |