| Index: Source/core/dom/shadow/ShadowRoot.cpp
|
| ===================================================================
|
| --- Source/core/dom/shadow/ShadowRoot.cpp (revision 159683)
|
| +++ Source/core/dom/shadow/ShadowRoot.cpp (working copy)
|
| @@ -33,6 +33,7 @@
|
| #include "core/dom/ElementTraversal.h"
|
| #include "core/dom/StyleEngine.h"
|
| #include "core/dom/Text.h"
|
| +#include "core/dom/WhitespaceChildList.h"
|
| #include "core/dom/shadow/ElementShadow.h"
|
| #include "core/dom/shadow/InsertionPoint.h"
|
| #include "core/dom/shadow/ShadowRootRareData.h"
|
| @@ -178,25 +179,21 @@
|
| change = Force;
|
|
|
| // FIXME: This doesn't handle :hover + div properly like Element::recalcStyle does.
|
| - bool forceReattachOfAnyWhitespaceSibling = false;
|
| - for (Node* child = firstChild(); child; child = child->nextSibling()) {
|
| - bool didReattach = false;
|
| -
|
| - if (child->renderer())
|
| - forceReattachOfAnyWhitespaceSibling = false;
|
| -
|
| + WhitespaceChildList whitespaceChildList(change);
|
| + for (Node* child = lastChild(); child; child = child->previousSibling()) {
|
| if (child->isTextNode()) {
|
| - if (forceReattachOfAnyWhitespaceSibling && toText(child)->containsOnlyWhitespace())
|
| - child->reattach();
|
| + Text* textChild = toText(child);
|
| + if (textChild->containsOnlyWhitespace())
|
| + whitespaceChildList.append(textChild);
|
| else
|
| - didReattach = toText(child)->recalcTextStyle(change);
|
| + textChild->recalcTextStyle(change);
|
| } else if (child->isElementNode() && shouldRecalcStyle(change, child)) {
|
| - didReattach = toElement(child)->recalcStyle(change);
|
| + toElement(child)->recalcStyle(change);
|
| }
|
| -
|
| - forceReattachOfAnyWhitespaceSibling = didReattach || forceReattachOfAnyWhitespaceSibling;
|
| }
|
|
|
| + whitespaceChildList.recalcStyle();
|
| +
|
| styleResolver->popParentShadowRoot(*this);
|
| clearNeedsStyleRecalc();
|
| clearChildNeedsStyleRecalc();
|
|
|