Module: wine Branch: master Commit: 6270a46ded3a0ce8d832704da0ccdd96749aec23 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6270a46ded3a0ce8d832704da0...
Author: Jacek Caban jacek@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**);