Jacek Caban : mshtml: Store HTMLElement struct instead of pointer in HTMLTextAreaElement.
Module: wine Branch: master Commit: 99d061a0414e16a9b129fd40ac0b4f3656d3c2a9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=99d061a0414e16a9b129fd40ac... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sat Sep 15 16:07:26 2007 +0200 mshtml: Store HTMLElement struct instead of pointer in HTMLTextAreaElement. --- dlls/mshtml/htmlelem.c | 11 +++++------ dlls/mshtml/htmltextarea.c | 20 +++++++++++--------- dlls/mshtml/mshtml_private.h | 2 +- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index d70f77b..5f93aa7 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1274,7 +1274,7 @@ HRESULT HTMLElement_QI(HTMLElement *This, REFIID riid, void **ppv) HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode) { nsIDOMHTMLElement *nselem; - HTMLElement *ret; + HTMLElement *ret = NULL; nsAString class_name_str; const PRUnichar *class_name; nsresult nsres; @@ -1302,15 +1302,14 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode) ret = HTMLInputElement_Create(nselem); if(!strcmpW(class_name, wszSELECT)) ret = HTMLSelectElement_Create(nselem); - else { + else if(!strcmpW(class_name, wszTEXTAREA)) + ret = HTMLTextAreaElement_Create(nselem); + + if(!ret) { ret = mshtml_alloc(sizeof(HTMLElement)); ret->impl = NULL; ret->destructor = NULL; - ret->nselem = nselem; - - if(!strcmpW(class_name, wszTEXTAREA)) - HTMLTextAreaElement_Create(ret); } nsAString_Finish(&class_name_str); diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 75c3f55..6266284 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -36,9 +36,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); typedef struct { + HTMLElement element; + const IHTMLTextAreaElementVtbl *lpHTMLTextAreaElementVtbl; - HTMLElement *element; nsIDOMHTMLTextAreaElement *nstextarea; } HTMLTextAreaElement; @@ -70,7 +71,7 @@ static HRESULT WINAPI HTMLTextAreaElement_QueryInterface(IHTMLTextAreaElement *i return S_OK; } - hres = HTMLElement_QI(This->element, riid, ppv); + hres = HTMLElement_QI(&This->element, riid, ppv); if(FAILED(hres)) WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); @@ -83,7 +84,7 @@ static ULONG WINAPI HTMLTextAreaElement_AddRef(IHTMLTextAreaElement *iface) TRACE("(%p)\n", This); - return IHTMLDocument2_AddRef(HTMLDOC(This->element->node.doc)); + return IHTMLDocument2_AddRef(HTMLDOC(This->element.node.doc)); } static ULONG WINAPI HTMLTextAreaElement_Release(IHTMLTextAreaElement *iface) @@ -92,7 +93,7 @@ static ULONG WINAPI HTMLTextAreaElement_Release(IHTMLTextAreaElement *iface) TRACE("(%p)\n", This); - return IHTMLDocument2_Release(HTMLDOC(This->element->node.doc)); + return IHTMLDocument2_Release(HTMLDOC(This->element.node.doc)); } static HRESULT WINAPI HTMLTextAreaElement_GetTypeInfoCount(IHTMLTextAreaElement *iface, UINT *pctinfo) @@ -395,19 +396,20 @@ static const IHTMLTextAreaElementVtbl HTMLTextAreaElementVtbl = { HTMLTextAreaElement_createTextRange }; -void HTMLTextAreaElement_Create(HTMLElement *element) +HTMLElement *HTMLTextAreaElement_Create(nsIDOMHTMLElement *nselem) { HTMLTextAreaElement *ret = mshtml_alloc(sizeof(HTMLTextAreaElement)); nsresult nsres; ret->lpHTMLTextAreaElementVtbl = &HTMLTextAreaElementVtbl; - ret->element = element; - nsres = nsIDOMHTMLElement_QueryInterface(element->nselem, &IID_nsIDOMHTMLTextAreaElement, + nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLTextAreaElement, (void**)&ret->nstextarea); if(NS_FAILED(nsres)) ERR("Could not get nsDOMHTMLInputElement: %08x\n", nsres); - element->impl = (IUnknown*)HTMLTXTAREA(ret); - element->destructor = HTMLTextAreaElement_destructor; + ret->element.impl = (IUnknown*)HTMLTXTAREA(ret); + ret->element.destructor = HTMLTextAreaElement_destructor; + + return &ret->element; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 644fe1b..e39b2e8 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -420,7 +420,7 @@ HTMLElement *HTMLAnchorElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLInputElement_Create(nsIDOMHTMLElement*); HTMLElement *HTMLSelectElement_Create(nsIDOMHTMLElement*); -void HTMLTextAreaElement_Create(HTMLElement*); +HTMLElement *HTMLTextAreaElement_Create(nsIDOMHTMLElement*); void HTMLElement2_Init(HTMLElement*);
participants (1)
-
Alexandre Julliard