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