Module: wine Branch: master Commit: af3d19fa0496f07669ea53b2d2f10099645d83e4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=af3d19fa0496f07669ea53b2d2...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Jun 30 21:38:23 2008 +0200
mshtml: DispatchEx's QueryInterface implementation clean up.
---
dlls/mshtml/dispex.c | 17 +++++++++++++++++ dlls/mshtml/htmlelem.c | 8 ++------ dlls/mshtml/htmlnode.c | 10 ++++------ dlls/mshtml/htmlstyle.c | 8 ++------ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/omnavigator.c | 8 ++------ 6 files changed, 28 insertions(+), 24 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 25f6214..a94806d 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -621,6 +621,23 @@ static IDispatchExVtbl DispatchExVtbl = { DispatchEx_GetNameSpaceParent };
+BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv) +{ + if(IsEqualGUID(&IID_IDispatch, riid)) { + TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); + *ppv = DISPATCHEX(This); + }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { + TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); + *ppv = DISPATCHEX(This); + }else { + return FALSE; + } + + if(*ppv) + IUnknown_AddRef((IUnknown*)*ppv); + return TRUE; +} + void init_dispex(DispatchEx *dispex, IUnknown *outer, dispex_static_data_t *data) { dispex->lpIDispatchExVtbl = &DispatchExVtbl; diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 7c20c2c..5f67356 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1542,15 +1542,11 @@ static HRESULT WINAPI HTMLElementCollection_QueryInterface(IHTMLElementCollectio if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = HTMLELEMCOL(This); - }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); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; }
if(*ppv) { diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index ae2bff0..7c03a96 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -58,15 +58,11 @@ static HRESULT WINAPI HTMLDOMChildrenCollection_QueryInterface(IHTMLDOMChildrenC if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = HTMLCHILDCOL(This); - }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); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; }
if(*ppv) { @@ -819,6 +815,8 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv) }else if(IsEqualGUID(&IID_IHTMLDOMNode2, riid)) { TRACE("(%p)->(IID_IHTMLDOMNode2 %p)\n", This, ppv); *ppv = HTMLDOMNODE2(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; }
if(*ppv) { diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 8bceb26..83a587f 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -235,15 +235,11 @@ static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, v if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = HTMLSTYLE(This); - }else if(IsEqualGUID(&IID_IDispatch, riid)) { - TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); - *ppv = HTMLSTYLE(This); - }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { - TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); - *ppv = DISPATCHEX(&This->dispex); }else if(IsEqualGUID(&IID_IHTMLStyle, riid)) { TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv); *ppv = HTMLSTYLE(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; }
if(*ppv) { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f815b26..ef7868d 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -134,6 +134,7 @@ typedef struct { } DispatchEx;
void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*); +BOOL dispex_query_interface(DispatchEx*,REFIID,void**);
typedef struct { DispatchEx dispex; diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index 9a6d537..a579333 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -51,15 +51,11 @@ static HRESULT WINAPI OmNavigator_QueryInterface(IOmNavigator *iface, REFIID rii if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = OMNAVIGATOR(This); - }else if(IsEqualGUID(&IID_IDispatch, riid)) { - TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); - *ppv = DISPATCHEX(&This->dispex); - }else if(IsEqualGUID(&IID_IDispatchEx, riid)) { - TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); - *ppv = DISPATCHEX(&This->dispex); }else if(IsEqualGUID(&IID_IOmNavigator, riid)) { TRACE("(%p)->(IID_IOmNavigator %p)\n", This, ppv); *ppv = OMNAVIGATOR(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; }
if(*ppv) {