From 989574510cdc8627b09b6ee94d1120ed1f334f73 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Thu, 24 Apr 2008 18:26:56 +0200 Subject: [PATCH] mshtml: Added IDispatchEx support to HTMLElementCollection object. --- dlls/mshtml/dispex.c | 2 ++ dlls/mshtml/htmlelem.c | 15 +++++++++++++++ dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/tests/dom.c | 2 ++ 4 files changed, 21 insertions(+) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index eb973b862f8..153d864fc02 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -53,6 +53,7 @@ static REFIID tid_ids[] = { &IID_NULL, &DIID_DispHTMLDocument, &DIID_DispHTMLDOMTextNode, + &DIID_DispHTMLElementCollection, &DIID_DispHTMLUnknownElement, &DIID_DispHTMLWindow2, &IID_IHTMLDocument2, @@ -64,6 +65,7 @@ static REFIID tid_ids[] = { &IID_IHTMLDOMTextNode, &IID_IHTMLElement, &IID_IHTMLElement2, + &IID_IHTMLElementCollection, &IID_IHTMLWindow2, &IID_IHTMLWindow3, &IID_IOmNavigator diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 82acb53e409..c44e2e56ae9 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1363,6 +1363,7 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode) } typedef struct { + DispatchEx dispex; const IHTMLElementCollectionVtbl *lpHTMLElementCollectionVtbl; IUnknown *ref_unk; @@ -1389,6 +1390,9 @@ static HRESULT WINAPI HTMLElementCollection_QueryInterface(IHTMLElementCollectio }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = HTMLELEMCOL(This); + }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { + TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); + *ppv = DISPATCHEX(&This->dispex); }else if(IsEqualGUID(&IID_IHTMLElementCollection, riid)) { TRACE("(%p)->(IID_IHTMLElementCollection %p)\n", This, ppv); *ppv = HTMLELEMCOL(This); @@ -1664,6 +1668,15 @@ static const IHTMLElementCollectionVtbl HTMLElementCollectionVtbl = { HTMLElementCollection_tags }; +static dispex_static_data_t HTMLElementCollection_dispex = { + DispHTMLElementCollection_tid, + NULL, + { + IHTMLElementCollection_tid, + 0 + } +}; + IHTMLElementCollection *create_all_collection(HTMLDOMNode *node) { elem_vector buf = {NULL, 0, 8}; @@ -1687,6 +1700,8 @@ static IHTMLElementCollection *HTMLElementCollection_Create(IUnknown *ref_unk, ret->elems = elems; ret->len = len; + init_dispex(&ret->dispex, (IUnknown*)HTMLELEMCOL(ret), &HTMLElementCollection_dispex); + IUnknown_AddRef(ref_unk); ret->ref_unk = ref_unk; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index e6041a0d61a..126bc2ec03e 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -63,6 +63,7 @@ typedef enum { NULL_tid, DispHTMLDocument_tid, DispHTMLDOMTextNode_tid, + DispHTMLElementCollection_tid, DispHTMLUnknownElement_tid, DispHTMLWindow2_tid, IHTMLDocument2_tid, @@ -74,6 +75,7 @@ typedef enum { IHTMLDOMTextNode_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElementCollection_tid, IHTMLWindow2_tid, IHTMLWindow3_tid, IOmNavigator_tid, diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 620ad976071..8c6f60fe9ff 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -709,6 +709,8 @@ static void _test_elem_collection(unsigned line, IHTMLElementCollection *col, IDispatch *disp; HRESULT hres; + test_disp((IUnknown*)col, &DIID_DispHTMLElementCollection); + hres = IHTMLElementCollection_get_length(col, &len); ok_(__FILE__,line) (hres == S_OK, "get_length failed: %08x\n", hres); ok_(__FILE__,line) (len == exlen, "len=%ld, expected %ld\n", len, exlen); -- 2.11.4.GIT