Jacek Caban : mshtml: Use create_collection_from_nodelist in IHTMLElement:: get_children implementation.

Alexandre Julliard julliard at winehq.org
Wed Oct 1 14:09:25 CDT 2008


Module: wine
Branch: master
Commit: 53f00d02218d9d97908ef9a6faa9670768b18845
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=53f00d02218d9d97908ef9a6faa9670768b18845

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep 30 17:44:50 2008 +0200

mshtml: Use create_collection_from_nodelist in IHTMLElement::get_children implementation.

---

 dlls/mshtml/htmlelem.c    |   41 ++++++++---------------------------------
 dlls/mshtml/htmlelemcol.c |    3 ++-
 2 files changed, 10 insertions(+), 34 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 1c623b3..fb3cccd 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -1210,48 +1210,23 @@ static HRESULT WINAPI HTMLElement_get_onfilterchange(IHTMLElement *iface, VARIAN
     return E_NOTIMPL;
 }
 
-static void create_child_list(HTMLDocument *doc, HTMLElement *elem, elem_vector *buf)
+static HRESULT WINAPI HTMLElement_get_children(IHTMLElement *iface, IDispatch **p)
 {
+    HTMLElement *This = HTMLELEM_THIS(iface);
     nsIDOMNodeList *nsnode_list;
-    nsIDOMNode *iter;
-    PRUint32 list_len = 0, i;
     nsresult nsres;
 
-    nsres = nsIDOMNode_GetChildNodes(elem->node.nsnode, &nsnode_list);
+    TRACE("(%p)->(%p)\n", This, p);
+
+    nsres = nsIDOMNode_GetChildNodes(This->node.nsnode, &nsnode_list);
     if(NS_FAILED(nsres)) {
         ERR("GetChildNodes failed: %08x\n", nsres);
-        return;
-    }
-
-    nsIDOMNodeList_GetLength(nsnode_list, &list_len);
-    if(!list_len)
-        return;
-
-    buf->size = list_len;
-    buf->buf = heap_alloc(buf->size*sizeof(HTMLElement**));
-
-    for(i=0; i<list_len; i++) {
-        nsres = nsIDOMNodeList_Item(nsnode_list, i, &iter);
-        if(NS_FAILED(nsres)) {
-            ERR("Item failed: %08x\n", nsres);
-            continue;
-        }
-
-        if(is_elem_node(iter))
-            elem_vector_add(buf, HTMLELEM_NODE_THIS(get_node(doc, iter, TRUE)));
+        return E_FAIL;
     }
-}
 
-static HRESULT WINAPI HTMLElement_get_children(IHTMLElement *iface, IDispatch **p)
-{
-    HTMLElement *This = HTMLELEM_THIS(iface);
-    elem_vector buf = {NULL, 0, 0};
+    *p = (IDispatch*)create_collection_from_nodelist(This->node.doc, (IUnknown*)HTMLELEM(This), nsnode_list);
 
-    TRACE("(%p)->(%p)\n", This, p);
-
-    create_child_list(This->node.doc, This, &buf);
-
-    *p = (IDispatch*)HTMLElementCollection_Create((IUnknown*)HTMLELEM(This), buf.buf, buf.len);
+    nsIDOMNodeList_Release(nsnode_list);
     return S_OK;
 }
 
diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c
index 325efdb..9a2c710 100644
--- a/dlls/mshtml/htmlelemcol.c
+++ b/dlls/mshtml/htmlelemcol.c
@@ -491,7 +491,8 @@ IHTMLElementCollection *create_collection_from_nodelist(HTMLDocument *doc, IUnkn
 
         for(i=0; i<length; i++) {
             nsIDOMNodeList_Item(nslist, i, &nsnode);
-            buf.buf[i] = HTMLELEM_NODE_THIS(get_node(doc, nsnode, TRUE));
+            if(is_elem_node(nsnode))
+                buf.buf[i] = HTMLELEM_NODE_THIS(get_node(doc, nsnode, TRUE));
             nsIDOMNode_Release(nsnode);
         }
     }else {




More information about the wine-cvs mailing list