Module: wine Branch: master Commit: 53f00d02218d9d97908ef9a6faa9670768b18845 URL: http://source.winehq.org/git/wine.git/?a=commit;h=53f00d02218d9d97908ef9a6fa...
Author: Jacek Caban jacek@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 {