Jacek Caban : mshtml: Added IDispatchEx support to HTMLEventObj.

Alexandre Julliard julliard at winehq.org
Fri Oct 10 08:06:43 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Oct  9 15:33:21 2008 -0500

mshtml: Added IDispatchEx support to HTMLEventObj.

---

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

diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 551be8d..7ddbe5b 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -65,6 +65,7 @@ static struct list dispex_data_list = LIST_INIT(dispex_data_list);
 
 static REFIID tid_ids[] = {
     &IID_NULL,
+    &DIID_DispCEventObj,
     &DIID_DispDOMChildrenCollection,
     &DIID_DispHTMLBody,
     &DIID_DispHTMLCommentElement,
@@ -100,6 +101,7 @@ static REFIID tid_ids[] = {
     &IID_IHTMLElement3,
     &IID_IHTMLElement4,
     &IID_IHTMLElementCollection,
+    &IID_IHTMLEventObj,
     &IID_IHTMLFrameBase2,
     &IID_IHTMLGenericElement,
     &IID_IHTMLImgElement,
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index f98e3a1..3c56e87 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -76,6 +76,7 @@ eventid_t str_to_eid(LPCWSTR str)
 }
 
 typedef struct {
+    DispatchEx dispex;
     const IHTMLEventObjVtbl  *lpIHTMLEventObjVtbl;
     LONG ref;
 } HTMLEventObj;
@@ -93,12 +94,11 @@ static HRESULT WINAPI HTMLEventObj_QueryInterface(IHTMLEventObj *iface, REFIID r
     if(IsEqualGUID(&IID_IUnknown, riid)) {
         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
         *ppv = HTMLEVENTOBJ(This);
-    }else if(IsEqualGUID(&IID_IDispatch, riid)) {
-        TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
-        *ppv = HTMLEVENTOBJ(This);
     }else if(IsEqualGUID(&IID_IHTMLEventObj, riid)) {
         TRACE("(%p)->(IID_IHTMLEventObj %p)\n", This, ppv);
         *ppv = HTMLEVENTOBJ(This);
+    }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
+        return *ppv ? S_OK : E_NOINTERFACE;
     }
 
     if(*ppv) {
@@ -380,6 +380,18 @@ static const IHTMLEventObjVtbl HTMLEventObjVtbl = {
     HTMLEventObj_get_srcFilter
 };
 
+static const tid_t HTMLEventObj_iface_tids[] = {
+    IHTMLEventObj_tid,
+    0
+};
+
+static dispex_static_data_t HTMLEventObj_dispex = {
+    NULL,
+    DispCEventObj_tid,
+    NULL,
+    HTMLEventObj_iface_tids
+};
+
 static IHTMLEventObj *create_event(void)
 {
     HTMLEventObj *ret;
@@ -388,6 +400,8 @@ static IHTMLEventObj *create_event(void)
     ret->lpIHTMLEventObjVtbl = &HTMLEventObjVtbl;
     ret->ref = 1;
 
+    init_dispex(&ret->dispex, (IUnknown*)HTMLEVENTOBJ(ret), &HTMLEventObj_dispex);
+
     return HTMLEVENTOBJ(ret);
 }
 
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index c86aa81..cfbe8f2 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,
+    DispCEventObj_tid,
     DispDOMChildrenCollection_tid,
     DispHTMLBody_tid,
     DispHTMLCommentElement_tid,
@@ -96,6 +97,7 @@ typedef enum {
     IHTMLElement3_tid,
     IHTMLElement4_tid,
     IHTMLElementCollection_tid,
+    IHTMLEventObj_tid,
     IHTMLFrameBase2_tid,
     IHTMLGenericElement_tid,
     IHTMLImgElement_tid,




More information about the wine-cvs mailing list