mshtml: Use an iface instead of a vtbl pointer in HTMLEventObj.

Michael Stefaniuc mstefani at redhat.de
Mon Dec 6 16:31:16 CST 2010


---
 dlls/mshtml/htmlevent.c |   87 +++++++++++++++++++++++------------------------
 1 files changed, 43 insertions(+), 44 deletions(-)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 7004a5f..e76f020 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -220,7 +220,7 @@ static DWORD get_node_handler_mask(eventid_t eid)
 
 typedef struct {
     DispatchEx dispex;
-    const IHTMLEventObjVtbl  *lpIHTMLEventObjVtbl;
+    IHTMLEventObj IHTMLEventObj_iface;
 
     LONG ref;
 
@@ -229,22 +229,23 @@ typedef struct {
     nsIDOMEvent *nsevent;
 } HTMLEventObj;
 
-#define HTMLEVENTOBJ(x) ((IHTMLEventObj*) &(x)->lpIHTMLEventObjVtbl)
-
-#define HTMLEVENTOBJ_THIS(iface) DEFINE_THIS(HTMLEventObj, IHTMLEventObj, iface)
+static inline HTMLEventObj *impl_from_IHTMLEventObj(IHTMLEventObj *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLEventObj, IHTMLEventObj_iface);
+}
 
 static HRESULT WINAPI HTMLEventObj_QueryInterface(IHTMLEventObj *iface, REFIID riid, void **ppv)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     *ppv = NULL;
 
     if(IsEqualGUID(&IID_IUnknown, riid)) {
         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
-        *ppv = HTMLEVENTOBJ(This);
+        *ppv = &This->IHTMLEventObj_iface;
     }else if(IsEqualGUID(&IID_IHTMLEventObj, riid)) {
         TRACE("(%p)->(IID_IHTMLEventObj %p)\n", This, ppv);
-        *ppv = HTMLEVENTOBJ(This);
+        *ppv = &This->IHTMLEventObj_iface;
     }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
         return *ppv ? S_OK : E_NOINTERFACE;
     }
@@ -260,7 +261,7 @@ static HRESULT WINAPI HTMLEventObj_QueryInterface(IHTMLEventObj *iface, REFIID r
 
 static ULONG WINAPI HTMLEventObj_AddRef(IHTMLEventObj *iface)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     LONG ref = InterlockedIncrement(&This->ref);
 
     TRACE("(%p) ref=%d\n", This, ref);
@@ -270,7 +271,7 @@ static ULONG WINAPI HTMLEventObj_AddRef(IHTMLEventObj *iface)
 
 static ULONG WINAPI HTMLEventObj_Release(IHTMLEventObj *iface)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     LONG ref = InterlockedDecrement(&This->ref);
 
     TRACE("(%p) ref=%d\n", This, ref);
@@ -287,14 +288,14 @@ static ULONG WINAPI HTMLEventObj_Release(IHTMLEventObj *iface)
 
 static HRESULT WINAPI HTMLEventObj_GetTypeInfoCount(IHTMLEventObj *iface, UINT *pctinfo)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo);
 }
 
 static HRESULT WINAPI HTMLEventObj_GetTypeInfo(IHTMLEventObj *iface, UINT iTInfo,
                                               LCID lcid, ITypeInfo **ppTInfo)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo);
 }
 
@@ -302,7 +303,7 @@ static HRESULT WINAPI HTMLEventObj_GetIDsOfNames(IHTMLEventObj *iface, REFIID ri
                                                 LPOLESTR *rgszNames, UINT cNames,
                                                 LCID lcid, DISPID *rgDispId)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId);
 }
 
@@ -310,14 +311,14 @@ static HRESULT WINAPI HTMLEventObj_Invoke(IHTMLEventObj *iface, DISPID dispIdMem
                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid,
             wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
 }
 
 static HRESULT WINAPI HTMLEventObj_get_srcElement(IHTMLEventObj *iface, IHTMLElement **p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     TRACE("(%p)->(%p)\n", This, p);
 
@@ -326,7 +327,7 @@ static HRESULT WINAPI HTMLEventObj_get_srcElement(IHTMLEventObj *iface, IHTMLEle
 
 static HRESULT WINAPI HTMLEventObj_get_altKey(IHTMLEventObj *iface, VARIANT_BOOL *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRBool ret = FALSE;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -356,7 +357,7 @@ static HRESULT WINAPI HTMLEventObj_get_altKey(IHTMLEventObj *iface, VARIANT_BOOL
 
 static HRESULT WINAPI HTMLEventObj_get_ctrlKey(IHTMLEventObj *iface, VARIANT_BOOL *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRBool ret = FALSE;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -386,7 +387,7 @@ static HRESULT WINAPI HTMLEventObj_get_ctrlKey(IHTMLEventObj *iface, VARIANT_BOO
 
 static HRESULT WINAPI HTMLEventObj_get_shiftKey(IHTMLEventObj *iface, VARIANT_BOOL *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRBool ret = FALSE;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -416,14 +417,14 @@ static HRESULT WINAPI HTMLEventObj_get_shiftKey(IHTMLEventObj *iface, VARIANT_BO
 
 static HRESULT WINAPI HTMLEventObj_put_returnValue(IHTMLEventObj *iface, VARIANT v)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     FIXME("(%p)->()\n", This);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI HTMLEventObj_get_returnValue(IHTMLEventObj *iface, VARIANT *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -433,14 +434,14 @@ static HRESULT WINAPI HTMLEventObj_get_returnValue(IHTMLEventObj *iface, VARIANT
 
 static HRESULT WINAPI HTMLEventObj_put_cancelBubble(IHTMLEventObj *iface, VARIANT_BOOL v)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     FIXME("(%p)->(%x)\n", This, v);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI HTMLEventObj_get_cancelBubble(IHTMLEventObj *iface, VARIANT_BOOL *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -450,7 +451,7 @@ static HRESULT WINAPI HTMLEventObj_get_cancelBubble(IHTMLEventObj *iface, VARIAN
 
 static HRESULT WINAPI HTMLEventObj_get_fromElement(IHTMLEventObj *iface, IHTMLElement **p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -460,7 +461,7 @@ static HRESULT WINAPI HTMLEventObj_get_fromElement(IHTMLEventObj *iface, IHTMLEl
 
 static HRESULT WINAPI HTMLEventObj_get_toElement(IHTMLEventObj *iface, IHTMLElement **p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -470,14 +471,14 @@ static HRESULT WINAPI HTMLEventObj_get_toElement(IHTMLEventObj *iface, IHTMLElem
 
 static HRESULT WINAPI HTMLEventObj_put_keyCode(IHTMLEventObj *iface, LONG v)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     FIXME("(%p)->(%d)\n", This, v);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI HTMLEventObj_get_keyCode(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRUint32 key_code = 0;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -499,7 +500,7 @@ static HRESULT WINAPI HTMLEventObj_get_keyCode(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_button(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRUint16 button = 0;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -521,7 +522,7 @@ static HRESULT WINAPI HTMLEventObj_get_button(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_type(IHTMLEventObj *iface, BSTR *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     TRACE("(%p)->(%p)\n", This, p);
 
@@ -531,7 +532,7 @@ static HRESULT WINAPI HTMLEventObj_get_type(IHTMLEventObj *iface, BSTR *p)
 
 static HRESULT WINAPI HTMLEventObj_get_qualifier(IHTMLEventObj *iface, BSTR *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -541,7 +542,7 @@ static HRESULT WINAPI HTMLEventObj_get_qualifier(IHTMLEventObj *iface, BSTR *p)
 
 static HRESULT WINAPI HTMLEventObj_get_reason(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -551,7 +552,7 @@ static HRESULT WINAPI HTMLEventObj_get_reason(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_x(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -561,7 +562,7 @@ static HRESULT WINAPI HTMLEventObj_get_x(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_y(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -571,7 +572,7 @@ static HRESULT WINAPI HTMLEventObj_get_y(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_clientX(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRInt32 x = 0;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -593,7 +594,7 @@ static HRESULT WINAPI HTMLEventObj_get_clientX(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_clientY(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRInt32 y = 0;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -615,7 +616,7 @@ static HRESULT WINAPI HTMLEventObj_get_clientY(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_offsetX(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -625,7 +626,7 @@ static HRESULT WINAPI HTMLEventObj_get_offsetX(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_offsetY(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -635,7 +636,7 @@ static HRESULT WINAPI HTMLEventObj_get_offsetY(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_screenX(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRInt32 x = 0;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -657,7 +658,7 @@ static HRESULT WINAPI HTMLEventObj_get_screenX(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_screenY(IHTMLEventObj *iface, LONG *p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
     PRInt32 y = 0;
 
     TRACE("(%p)->(%p)\n", This, p);
@@ -679,7 +680,7 @@ static HRESULT WINAPI HTMLEventObj_get_screenY(IHTMLEventObj *iface, LONG *p)
 
 static HRESULT WINAPI HTMLEventObj_get_srcFilter(IHTMLEventObj *iface, IDispatch **p)
 {
-    HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
+    HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
 
     FIXME("(%p)->(%p)\n", This, p);
 
@@ -687,8 +688,6 @@ static HRESULT WINAPI HTMLEventObj_get_srcFilter(IHTMLEventObj *iface, IDispatch
     return S_OK;
 }
 
-#undef HTMLEVENTOBJ_THIS
-
 static const IHTMLEventObjVtbl HTMLEventObjVtbl = {
     HTMLEventObj_QueryInterface,
     HTMLEventObj_AddRef,
@@ -744,7 +743,7 @@ static IHTMLEventObj *create_event(HTMLDOMNode *target, eventid_t eid, nsIDOMEve
     if(!ret)
         return NULL;
 
-    ret->lpIHTMLEventObjVtbl = &HTMLEventObjVtbl;
+    ret->IHTMLEventObj_iface.lpVtbl = &HTMLEventObjVtbl;
     ret->ref = 1;
     ret->type = event_info+eid;
 
@@ -767,7 +766,7 @@ static IHTMLEventObj *create_event(HTMLDOMNode *target, eventid_t eid, nsIDOMEve
         }
         if(NS_FAILED(nsres)) {
             ERR("Could not create event: %08x\n", nsres);
-            IHTMLEventObj_Release(HTMLEVENTOBJ(ret));
+            IHTMLEventObj_Release(&ret->IHTMLEventObj_iface);
             return NULL;
         }
     }
@@ -775,9 +774,9 @@ static IHTMLEventObj *create_event(HTMLDOMNode *target, eventid_t eid, nsIDOMEve
     ret->target = target;
     IHTMLDOMNode_AddRef(HTMLDOMNODE(target));
 
-    init_dispex(&ret->dispex, (IUnknown*)HTMLEVENTOBJ(ret), &HTMLEventObj_dispex);
+    init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLEventObj_iface, &HTMLEventObj_dispex);
 
-    return HTMLEVENTOBJ(ret);
+    return &ret->IHTMLEventObj_iface;
 }
 
 static HRESULT call_cp_func(IDispatch *disp, DISPID dispid)
-- 
1.7.3.2



More information about the wine-patches mailing list