Jacek Caban : mshtml: Added IDispatchEx support to HTMLDOMChildrenCollection.

Alexandre Julliard julliard at winehq.org
Thu May 1 06:38:38 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Apr 30 18:18:09 2008 +0200

mshtml: Added IDispatchEx support to HTMLDOMChildrenCollection.

---

 dlls/mshtml/dispex.c         |    2 ++
 dlls/mshtml/htmlnode.c       |   16 ++++++++++++++++
 dlls/mshtml/mshtml_private.h |    2 ++
 3 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 6f17a9d..f0cfc59 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -51,6 +51,7 @@ static struct list dispex_data_list = LIST_INIT(dispex_data_list);
 
 static REFIID tid_ids[] = {
     &IID_NULL,
+    &DIID_DispDOMChildrenCollection,
     &DIID_DispHTMLDocument,
     &DIID_DispHTMLDOMTextNode,
     &DIID_DispHTMLElementCollection,
@@ -62,6 +63,7 @@ static REFIID tid_ids[] = {
     &IID_IHTMLDocument3,
     &IID_IHTMLDocument4,
     &IID_IHTMLDocument5,
+    &IID_IHTMLDOMChildrenCollection,
     &IID_IHTMLDOMNode,
     &IID_IHTMLDOMNode2,
     &IID_IHTMLDOMTextNode,
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index dbb35e1..1a9bea3 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -32,6 +32,7 @@
 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
 typedef struct {
+    DispatchEx dispex;
     const IHTMLDOMChildrenCollectionVtbl  *lpIHTMLDOMChildrenCollectionVtbl;
 
     LONG ref;
@@ -58,6 +59,9 @@ static HRESULT WINAPI HTMLDOMChildrenCollection_QueryInterface(IHTMLDOMChildrenC
     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
         *ppv = HTMLCHILDCOL(This);
+    }else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
+        TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
+        *ppv = DISPATCHEX(&This->dispex);
     }else if(IsEqualGUID(&IID_IHTMLDOMChildrenCollection, riid)) {
         TRACE("(%p)->(IID_IHTMLDOMChildrenCollection %p)\n", This, ppv);
         *ppv = HTMLCHILDCOL(This);
@@ -189,6 +193,16 @@ static const IHTMLDOMChildrenCollectionVtbl HTMLDOMChildrenCollectionVtbl = {
     HTMLDOMChildrenCollection_item
 };
 
+static dispex_static_data_t HTMLDOMChildrenCollection_dispex = {
+    NULL,
+    DispDOMChildrenCollection_tid,
+    NULL,
+    {
+        IHTMLDOMChildrenCollection_tid,
+        0
+    }
+};
+
 static IHTMLDOMChildrenCollection *create_child_collection(HTMLDocument *doc, nsIDOMNodeList *nslist)
 {
     HTMLDOMChildrenCollection *ret;
@@ -201,6 +215,8 @@ static IHTMLDOMChildrenCollection *create_child_collection(HTMLDocument *doc, ns
     ret->nslist = nslist;
     ret->doc = doc;
 
+    init_dispex(&ret->dispex, (IUnknown*)HTMLCHILDCOL(ret), &HTMLDOMChildrenCollection_dispex);
+
     return HTMLCHILDCOL(ret);
 }
 
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 55c0090..92d63a2 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -61,6 +61,7 @@ typedef struct event_target_t event_target_t;
 /* NOTE: make sure to keep in sync with dispex.c */
 typedef enum {
     NULL_tid,
+    DispDOMChildrenCollection_tid,
     DispHTMLDocument_tid,
     DispHTMLDOMTextNode_tid,
     DispHTMLElementCollection_tid,
@@ -72,6 +73,7 @@ typedef enum {
     IHTMLDocument3_tid,
     IHTMLDocument4_tid,
     IHTMLDocument5_tid,
+    IHTMLDOMChildrenCollection_tid,
     IHTMLDOMNode_tid,
     IHTMLDOMNode2_tid,
     IHTMLDOMTextNode_tid,




More information about the wine-cvs mailing list