Jacek Caban : mshtml: Pass HTMLDOMNode pointer to its destructor.
Alexandre Julliard
julliard at winehq.org
Thu Oct 4 06:21:08 CDT 2007
Module: wine
Branch: master
Commit: 6270a46ded3a0ce8d832704da0ccdd96749aec23
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6270a46ded3a0ce8d832704da0ccdd96749aec23
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Oct 4 02:07:59 2007 +0200
mshtml: Pass HTMLDOMNode pointer to its destructor.
---
dlls/mshtml/htmlelem.c | 28 ++++++++++++++--------------
dlls/mshtml/htmlnode.c | 2 +-
dlls/mshtml/mshtml_private.h | 5 +++--
3 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 609a64d..f646084 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -58,7 +58,7 @@ static void elem_vector_add(elem_vector *buf, HTMLElement *elem)
#define HTMLELEM_THIS(iface) DEFINE_THIS(HTMLElement, HTMLElement, iface)
-#define HTMLELEM_NODE_THIS(node) ((HTMLElement *) node)
+#define HTMLELEM_NODE_THIS(iface) DEFINE_THIS2(HTMLElement, node, iface)
static HRESULT WINAPI HTMLElement_QueryInterface(IHTMLElement *iface,
REFIID riid, void **ppv)
@@ -1140,19 +1140,6 @@ static HRESULT WINAPI HTMLElement_get_all(IHTMLElement *iface, IDispatch **p)
return HTMLElementCollection_Create((IUnknown*)HTMLELEM(This), buf.buf, buf.len, p);
}
-static void HTMLElement_destructor(IUnknown *iface)
-{
- HTMLElement *This = HTMLELEM_THIS(iface);
-
- if(This->destructor)
- This->destructor(This->impl);
-
- if(This->nselem)
- nsIDOMHTMLElement_Release(This->nselem);
-
- mshtml_free(This);
-}
-
#undef HTMLELEM_THIS
static const IHTMLElementVtbl HTMLElementVtbl = {
@@ -1278,6 +1265,19 @@ HRESULT HTMLElement_QI(HTMLElement *This, REFIID riid, void **ppv)
return HTMLDOMNode_QI(&This->node, riid, ppv);
}
+static void HTMLElement_destructor(HTMLDOMNode *iface)
+{
+ HTMLElement *This = HTMLELEM_NODE_THIS(iface);
+
+ if(This->destructor)
+ This->destructor(This->impl);
+
+ if(This->nselem)
+ nsIDOMHTMLElement_Release(This->nselem);
+
+ mshtml_free(This);
+}
+
HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode)
{
nsIDOMHTMLElement *nselem;
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 51837ce..0e2c127 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -395,7 +395,7 @@ void release_nodes(HTMLDocument *This)
next = iter->next;
nsIDOMNode_Release(iter->nsnode);
if(iter->destructor)
- iter->destructor(iter->impl.unk);
+ iter->destructor(iter);
else
mshtml_free(iter);
}
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 3db047f..2a6c15c 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -253,7 +253,7 @@ struct BSCallback {
struct HTMLDOMNode {
const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl;
- void (*destructor)(IUnknown*);
+ void (*destructor)(HTMLDOMNode*);
union {
IUnknown *unk;
@@ -335,7 +335,8 @@ typedef struct {
#define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl)
-#define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
+#define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc)))
+#define DEFINE_THIS(cls,ifc,iface) DEFINE_THIS2(cls,lp ## ifc ## Vtbl,iface)
HRESULT HTMLDocument_Create(IUnknown*,REFIID,void**);
HRESULT HTMLLoadOptions_Create(IUnknown*,REFIID,void**);
More information about the wine-cvs
mailing list