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