Module: wine Branch: master Commit: fb16633d6f7c6522c3453e3efca0296630198977 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fb16633d6f7c6522c3453e3efc...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jun 29 02:47:59 2007 +0200
mshtml: Don't use dynamic allocation for connection points.
---
dlls/mshtml/conpoint.c | 50 ++++++++++++----------------------------- dlls/mshtml/mshtml_private.h | 21 +++++++++++++++-- dlls/mshtml/persist.c | 2 +- dlls/mshtml/task.c | 6 ++-- 4 files changed, 37 insertions(+), 42 deletions(-)
diff --git a/dlls/mshtml/conpoint.c b/dlls/mshtml/conpoint.c index 9077baf..421a72e 100644 --- a/dlls/mshtml/conpoint.c +++ b/dlls/mshtml/conpoint.c @@ -36,21 +36,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
#define CONPOINT(x) ((IConnectionPoint*) &(x)->lpConnectionPointVtbl);
-struct ConnectionPoint { - const IConnectionPointVtbl *lpConnectionPointVtbl; - - HTMLDocument *doc; - - union { - IUnknown *unk; - IDispatch *disp; - IPropertyNotifySink *propnotif; - } *sinks; - DWORD sinks_size; - - IID iid; -}; - void call_property_onchanged(ConnectionPoint *This, DISPID dispid) { DWORD i; @@ -199,17 +184,13 @@ static const IConnectionPointVtbl ConnectionPointVtbl = ConnectionPoint_EnumConnections };
-static void ConnectionPoint_Create(HTMLDocument *doc, REFIID riid, ConnectionPoint **cp) +static void ConnectionPoint_Init(HTMLDocument *doc, REFIID riid, ConnectionPoint *cp) { - ConnectionPoint *ret = mshtml_alloc(sizeof(ConnectionPoint)); - - ret->lpConnectionPointVtbl = &ConnectionPointVtbl; - ret->doc = doc; - ret->sinks = NULL; - ret->sinks_size = 0; - memcpy(&ret->iid, riid, sizeof(IID)); - - *cp = ret; + cp->lpConnectionPointVtbl = &ConnectionPointVtbl; + cp->doc = doc; + cp->sinks = NULL; + cp->sinks_size = 0; + cp->iid = *riid; }
static void ConnectionPoint_Destroy(ConnectionPoint *This) @@ -222,7 +203,6 @@ static void ConnectionPoint_Destroy(ConnectionPoint *This) }
mshtml_free(This->sinks); - mshtml_free(This); }
#define CONPTCONT_THIS(iface) DEFINE_THIS(HTMLDocument, ConnectionPointContainer, iface) @@ -263,13 +243,13 @@ static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPo
if(IsEqualGUID(&DIID_HTMLDocumentEvents, riid)) { TRACE("(%p)->(DIID_HTMLDocumentEvents %p)\n", This, ppCP); - *ppCP = CONPOINT(This->cp_htmldocevents); + *ppCP = CONPOINT(&This->cp_htmldocevents); }else if(IsEqualGUID(&DIID_HTMLDocumentEvents2, riid)) { TRACE("(%p)->(DIID_HTMLDocumentEvents2 %p)\n", This, ppCP); - *ppCP = CONPOINT(This->cp_htmldocevents2); + *ppCP = CONPOINT(&This->cp_htmldocevents2); }else if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { TRACE("(%p)->(IID_IPropertyNotifySink %p)\n", This, ppCP); - *ppCP = CONPOINT(This->cp_propnotif); + *ppCP = CONPOINT(&This->cp_propnotif); }
if(*ppCP) { @@ -295,14 +275,14 @@ void HTMLDocument_ConnectionPoints_Init(HTMLDocument *This) { This->lpConnectionPointContainerVtbl = &ConnectionPointContainerVtbl;
- ConnectionPoint_Create(This, &IID_IPropertyNotifySink, &This->cp_propnotif); - ConnectionPoint_Create(This, &DIID_HTMLDocumentEvents, &This->cp_htmldocevents); - ConnectionPoint_Create(This, &DIID_HTMLDocumentEvents2, &This->cp_htmldocevents2); + ConnectionPoint_Init(This, &IID_IPropertyNotifySink, &This->cp_propnotif); + ConnectionPoint_Init(This, &DIID_HTMLDocumentEvents, &This->cp_htmldocevents); + ConnectionPoint_Init(This, &DIID_HTMLDocumentEvents2, &This->cp_htmldocevents2); }
void HTMLDocument_ConnectionPoints_Destroy(HTMLDocument *This) { - ConnectionPoint_Destroy(This->cp_propnotif); - ConnectionPoint_Destroy(This->cp_htmldocevents); - ConnectionPoint_Destroy(This->cp_htmldocevents2); + ConnectionPoint_Destroy(&This->cp_propnotif); + ConnectionPoint_Destroy(&This->cp_htmldocevents); + ConnectionPoint_Destroy(&This->cp_htmldocevents2); } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 1b8b02f..b343697 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -71,6 +71,21 @@ typedef enum { EDITMODE } USERMODE;
+struct ConnectionPoint { + const IConnectionPointVtbl *lpConnectionPointVtbl; + + HTMLDocument *doc; + + union { + IUnknown *unk; + IDispatch *disp; + IPropertyNotifySink *propnotif; + } *sinks; + DWORD sinks_size; + + IID iid; +}; + struct HTMLDocument { const IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl; const IHTMLDocument3Vtbl *lpHTMLDocument3Vtbl; @@ -120,9 +135,9 @@ struct HTMLDocument {
DWORD update;
- ConnectionPoint *cp_htmldocevents; - ConnectionPoint *cp_htmldocevents2; - ConnectionPoint *cp_propnotif; + ConnectionPoint cp_htmldocevents; + ConnectionPoint cp_htmldocevents2; + ConnectionPoint cp_propnotif;
HTMLDOMNode *nodes; }; diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index 58ca422..3b606d6 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -177,7 +177,7 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO }
This->readystate = READYSTATE_LOADING; - call_property_onchanged(This->cp_propnotif, DISPID_READYSTATE); + call_property_onchanged(&This->cp_propnotif, DISPID_READYSTATE); update_doc(This, UPDATE_TITLE);
HTMLDocument_LockContainer(This, TRUE); diff --git a/dlls/mshtml/task.c b/dlls/mshtml/task.c index 540c969..5204a89 100644 --- a/dlls/mshtml/task.c +++ b/dlls/mshtml/task.c @@ -135,10 +135,10 @@ static void set_parsecomplete(HTMLDocument *doc) if(doc->usermode == EDITMODE) init_editor(doc);
- call_property_onchanged(doc->cp_propnotif, 1005); + call_property_onchanged(&doc->cp_propnotif, 1005);
doc->readystate = READYSTATE_INTERACTIVE; - call_property_onchanged(doc->cp_propnotif, DISPID_READYSTATE); + call_property_onchanged(&doc->cp_propnotif, DISPID_READYSTATE);
if(doc->client) IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); @@ -163,7 +163,7 @@ static void set_parsecomplete(HTMLDocument *doc) }
doc->readystate = READYSTATE_COMPLETE; - call_property_onchanged(doc->cp_propnotif, DISPID_READYSTATE); + call_property_onchanged(&doc->cp_propnotif, DISPID_READYSTATE);
if(doc->frame) { static const WCHAR wszDone[] = {'D','o','n','e',0};