diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-01 10:36:58 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-01 10:36:58 +0200 |
commit | b1e9e47fa11f608ae16bc07f97a2acf95bf80272 (patch) | |
tree | c88c45e80c9c44506e7cdf9a3bb39ebf82a8cd5b /Source/WebCore/html/HTMLFieldSetElement.cpp | |
parent | be01689f43cf6882cf670d33df49ead1f570c53a (diff) | |
download | qtwebkit-b1e9e47fa11f608ae16bc07f97a2acf95bf80272.tar.gz |
Imported WebKit commit 499c84c99aa98e9870fa7eaa57db476c6d160d46 (http://svn.webkit.org/repository/webkit/trunk@119200)
Weekly update :). Particularly relevant changes for Qt are the use of the WebCore image decoders and direct usage
of libpng/libjpeg if available in the system.
Diffstat (limited to 'Source/WebCore/html/HTMLFieldSetElement.cpp')
-rw-r--r-- | Source/WebCore/html/HTMLFieldSetElement.cpp | 72 |
1 files changed, 68 insertions, 4 deletions
diff --git a/Source/WebCore/html/HTMLFieldSetElement.cpp b/Source/WebCore/html/HTMLFieldSetElement.cpp index 8a240c024..c0b07e867 100644 --- a/Source/WebCore/html/HTMLFieldSetElement.cpp +++ b/Source/WebCore/html/HTMLFieldSetElement.cpp @@ -24,9 +24,11 @@ #include "config.h" #include "HTMLFieldSetElement.h" -#include "HTMLLegendElement.h" +#include "HTMLFormCollection.h" +#include "HTMLLegendElement.h" #include "HTMLNames.h" +#include "HTMLObjectElement.h" #include "RenderFieldset.h" #include <wtf/StdLibExtras.h> @@ -45,14 +47,27 @@ PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(const QualifiedName& return adoptRef(new HTMLFieldSetElement(tagName, document, form)); } +void HTMLFieldSetElement::invalidateDisabledStateUnder(Element* base) +{ + for (Node* node = base->firstChild(); node; node = node->traverseNextNode(base)) { + if (node->isElementNode() && toElement(node)->isFormControlElement()) + static_cast<HTMLFormControlElement*>(node)->ancestorDisabledStateWasChanged(); + } +} + void HTMLFieldSetElement::disabledAttributeChanged() { // This element must be updated before the style of nodes in its subtree gets recalculated. HTMLFormControlElement::disabledAttributeChanged(); + invalidateDisabledStateUnder(this); +} - for (Node* currentNode = this; currentNode; currentNode = currentNode->traverseNextNode(this)) { - if (currentNode && currentNode->isElementNode() && toElement(currentNode)->isFormControlElement()) - static_cast<HTMLFormControlElement*>(currentNode)->setNeedsStyleRecalc(); +void HTMLFieldSetElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) +{ + HTMLFormControlElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta); + for (Element* element = firstElementChild(); element; element = element->nextElementSibling()) { + if (element->hasTagName(legendTag)) + invalidateDisabledStateUnder(element); } } @@ -81,4 +96,53 @@ HTMLLegendElement* HTMLFieldSetElement::legend() const return 0; } +HTMLCollection* HTMLFieldSetElement::elements() +{ + if (!m_elementsCollection) + m_elementsCollection = HTMLFormCollection::create(this); + return m_elementsCollection.get(); +} + +void HTMLFieldSetElement::refreshElementsIfNeeded() const +{ + uint64_t docVersion = document()->domTreeVersion(); + if (m_documentVersion == docVersion) + return; + + m_documentVersion = docVersion; + + m_associatedElements.clear(); + + for (Node* node = firstChild(); node; node = node->traverseNextNode(this)) { + if (!node->isElementNode()) + continue; + + if (node->hasTagName(objectTag)) { + m_associatedElements.append(static_cast<HTMLObjectElement*>(node)); + continue; + } + + if (!toElement(node)->isFormControlElement()) + continue; + + m_associatedElements.append(static_cast<HTMLFormControlElement*>(node)); + } +} + +const Vector<FormAssociatedElement*>& HTMLFieldSetElement::associatedElements() const +{ + refreshElementsIfNeeded(); + return m_associatedElements; +} + +unsigned HTMLFieldSetElement::length() const +{ + refreshElementsIfNeeded(); + unsigned len = 0; + for (unsigned i = 0; i < m_associatedElements.size(); ++i) + if (m_associatedElements[i]->isEnumeratable()) + ++len; + return len; +} + } // namespace |