Reviewed by John.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 30 Jan 2005 18:08:41 +0000 (18:08 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 30 Jan 2005 18:08:41 +0000 (18:08 +0000)
        - fixed <rdar://problem/3974246> REGRESSION (125-180): popup menus are missing item text on Harmony Remote web site

        * khtml/html/html_formimpl.cpp: (DOM::HTMLOptionElementImpl::text): Change this function to traverse the entire tree
        and gather all the text rather than just looking at immediate children.

        * khtml/xml/dom_nodeimpl.h: Added const.
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::traverseNextNode): Added const.
        (NodeImpl::traverseNextSibling): Ditto.
        (NodeImpl::traversePreviousNodePostOrder): Ditto.
        (NodeImpl::detach): Add a missing nil check.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8478 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/html_formimpl.cpp
WebCore/khtml/xml/dom_nodeimpl.cpp
WebCore/khtml/xml/dom_nodeimpl.h

index 8b633b4f2a5e1c5880bb0e52a718411868dd3ba3..66b4844dc75cfc96490a64533a18626516b28653 100644 (file)
@@ -1,3 +1,19 @@
+2005-01-30  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3974246> REGRESSION (125-180): popup menus are missing item text on Harmony Remote web site
+
+        * khtml/html/html_formimpl.cpp: (DOM::HTMLOptionElementImpl::text): Change this function to traverse the entire tree
+        and gather all the text rather than just looking at immediate children.
+
+        * khtml/xml/dom_nodeimpl.h: Added const.
+        * khtml/xml/dom_nodeimpl.cpp:
+        (NodeImpl::traverseNextNode): Added const.
+        (NodeImpl::traverseNextSibling): Ditto.
+        (NodeImpl::traversePreviousNodePostOrder): Ditto.
+        (NodeImpl::detach): Add a missing nil check.
+
 2005-01-30  Darin Adler  <darin@apple.com>
 
         Reviewed by John.
index 719cf5ae4a4e149ebb15a414c1376afe5d7710ee..6149d82248f002c9789c685e613335a0c0b8223c 100644 (file)
@@ -2782,26 +2782,22 @@ DOMString HTMLOptionElementImpl::type() const
 
 DOMString HTMLOptionElementImpl::text() const
 {
-    DOMString label;
+    DOMString text;
+
     // WinIE does not use the label attribute, so as a quirk, we ignore it.
-    if (getDocument() && !getDocument()->inCompatMode())
-        label = getAttribute(ATTR_LABEL);
-    if (label.isEmpty() && firstChild() && firstChild()->nodeType() == Node::TEXT_NODE) {
-       if (firstChild()->nextSibling()) {
-           DOMString ret = "";
-           NodeImpl *n = firstChild();
-           for (; n; n = n->nextSibling()) {
-               if (n->nodeType() == Node::TEXT_NODE ||
-                   n->nodeType() == Node::CDATA_SECTION_NODE)
-                   ret += n->nodeValue();
-           }
-           return ret;
-       }
-       else
-           return firstChild()->nodeValue();
+    if (getDocument() && !getDocument()->inCompatMode()) {
+        DOMString text = getAttribute(ATTR_LABEL);
+        if (!text.isEmpty())
+            return text;
     }
-    else
-        return label;
+
+    const NodeImpl *n = this;
+    while ((n = n->traverseNextNode(this))) {
+        if (n->nodeType() == Node::TEXT_NODE || n->nodeType() == Node::CDATA_SECTION_NODE)
+            text += n->nodeValue();
+    }
+
+    return text;
 }
 
 long HTMLOptionElementImpl::index() const
index 89122e8ac03a11e87cccd4d4de74eb6569480a11..1302442ba8f2c32d99b176bfbfea47868b6c76bb 100644 (file)
@@ -502,7 +502,7 @@ bool NodeImpl::dispatchGenericEvent( EventImpl *evt, int &/*exceptioncode */)
 
        // Bubbling second. -dwh
        if (!evt->propagationStopped())
-         it.current()->handleLocalEvents(evt,false);
+            it.current()->handleLocalEvents(evt,false);
     }
     --it;
 
@@ -822,7 +822,7 @@ NodeImpl *NodeImpl::childNode(unsigned long /*index*/)
     return 0;
 }
 
-NodeImpl *NodeImpl::traverseNextNode(NodeImpl *stayWithin) const
+NodeImpl *NodeImpl::traverseNextNode(const NodeImpl *stayWithin) const
 {
     if (firstChild()) {
         assert(!stayWithin || firstChild()->isAncestor(stayWithin));
@@ -844,7 +844,7 @@ NodeImpl *NodeImpl::traverseNextNode(NodeImpl *stayWithin) const
     return 0;
 }
 
-NodeImpl *NodeImpl::traverseNextSibling(NodeImpl *stayWithin) const
+NodeImpl *NodeImpl::traverseNextSibling(const NodeImpl *stayWithin) const
 {
     if (this == stayWithin)
         return 0;
@@ -878,7 +878,7 @@ NodeImpl *NodeImpl::traversePreviousNode() const
     }
 }
 
-NodeImpl *NodeImpl::traversePreviousNodePostOrder(NodeImpl *stayWithin) const
+NodeImpl *NodeImpl::traversePreviousNodePostOrder(const NodeImpl *stayWithin) const
 {
     if (lastChild()) {
         assert(!stayWithin || lastChild()->isAncestor(stayWithin));
@@ -1064,7 +1064,9 @@ void NodeImpl::detach()
         m_render->detach();
 
     m_render = 0;
-    getDocument()->incDOMTreeVersion();
+    DocumentImpl *doc = getDocument();
+    if (doc)
+        doc->incDOMTreeVersion();
     m_attached = false;
 }
 
index 616b200a38b5ede9de5bee791e75b2da88437400..8b5b9448e9c81bf048cf066ea802f5372dd4ffa1 100644 (file)
@@ -314,10 +314,10 @@ public:
      *
      * see @ref traversePreviousNode()
      */
-    NodeImpl *traverseNextNode(NodeImpl *stayWithin = 0) const;
+    NodeImpl *traverseNextNode(const NodeImpl *stayWithin = 0) const;
     
     /* Like traverseNextNode, but skips children and starts with the next sibling. */
-    NodeImpl *traverseNextSibling(NodeImpl *stayWithin = 0) const;
+    NodeImpl *traverseNextSibling(const NodeImpl *stayWithin = 0) const;
 
     /**
      * Does a reverse pre-order traversal to find the node that comes before the current one in document order
@@ -327,7 +327,7 @@ public:
     NodeImpl *traversePreviousNode() const;
 
     /* Like traversePreviousNode, but visits nodes before their children. */
-    NodeImpl *traversePreviousNodePostOrder(NodeImpl *stayWithin = 0) const;
+    NodeImpl *traversePreviousNodePostOrder(const NodeImpl *stayWithin = 0) const;
 
     DocumentPtr *docPtr() const { return document; }