diff --git a/dlls/mshtml/conpoint.c b/dlls/mshtml/conpoint.c index b5c969c82cd..a8e3d5626a5 100644 --- a/dlls/mshtml/conpoint.c +++ b/dlls/mshtml/conpoint.c @@ -93,7 +93,7 @@ static HRESULT WINAPI ConnectionPoint_GetConnectionInterface(IConnectionPoint *i if(!pIID) return E_POINTER; - memcpy(pIID, &This->iid, sizeof(IID)); + memcpy(pIID, This->iid, sizeof(IID)); return S_OK; } @@ -122,8 +122,8 @@ static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown * TRACE("(%p)->(%p %p)\n", This, pUnkSink, pdwCookie); - hres = IUnknown_QueryInterface(pUnkSink, &This->iid, (void**)&sink); - if(FAILED(hres) && !IsEqualGUID(&IID_IPropertyNotifySink, &This->iid)) + hres = IUnknown_QueryInterface(pUnkSink, This->iid, (void**)&sink); + if(FAILED(hres) && !IsEqualGUID(&IID_IPropertyNotifySink, This->iid)) hres = IUnknown_QueryInterface(pUnkSink, &IID_IDispatch, (void**)&sink); if(FAILED(hres)) return CONNECT_E_CANNOTCONNECT; @@ -184,18 +184,17 @@ static const IConnectionPointVtbl ConnectionPointVtbl = ConnectionPoint_EnumConnections }; -void ConnectionPoint_Init(ConnectionPoint *cp, IConnectionPointContainer *container, - REFIID riid, ConnectionPoint *prev) +void ConnectionPoint_Init(ConnectionPoint *cp, ConnectionPointContainer *container, REFIID riid) { cp->lpConnectionPointVtbl = &ConnectionPointVtbl; - cp->container = container; + cp->container = CONPTCONT(container); cp->sinks = NULL; cp->sinks_size = 0; - cp->iid = *riid; + cp->iid = riid; cp->next = NULL; - if(prev) - prev->next = cp; + cp->next = container->cp_list; + container->cp_list = cp; } static void ConnectionPoint_Destroy(ConnectionPoint *This) @@ -250,7 +249,7 @@ static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPo *ppCP = NULL; for(iter = This->cp_list; iter; iter = iter->next) { - if(IsEqualGUID(&iter->iid, riid)) + if(IsEqualGUID(iter->iid, riid)) *ppCP = CONPOINT(iter); } @@ -273,11 +272,10 @@ static const IConnectionPointContainerVtbl ConnectionPointContainerVtbl = { #undef CONPTCONT_THIS -void ConnectionPointContainer_Init(ConnectionPointContainer *This, ConnectionPoint *cp_list, - IUnknown *outer) +void ConnectionPointContainer_Init(ConnectionPointContainer *This, IUnknown *outer) { This->lpConnectionPointContainerVtbl = &ConnectionPointContainerVtbl; - This->cp_list = cp_list; + This->cp_list = NULL; This->outer = outer; } diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index e475d5d1679..b1b6c4ca115 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -506,11 +506,9 @@ HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement *nselem) HTMLTextContainer_Init(&ret->textcont); - ConnectionPoint_Init(&ret->cp_propnotif, CONPTCONT(&ret->cp_container), - &IID_IPropertyNotifySink, NULL); - ConnectionPoint_Init(&ret->cp_txtcontevents, CONPTCONT(&ret->cp_container), - &DIID_HTMLTextContainerEvents, &ret->cp_propnotif); - ConnectionPointContainer_Init(&ret->cp_container, &ret->cp_propnotif, (IUnknown*)HTMLBODY(ret)); + ConnectionPointContainer_Init(&ret->cp_container, (IUnknown*)HTMLBODY(ret)); + ConnectionPoint_Init(&ret->cp_propnotif, &ret->cp_container, &IID_IPropertyNotifySink); + ConnectionPoint_Init(&ret->cp_txtcontevents, &ret->cp_container, &DIID_HTMLTextContainerEvents); nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLBodyElement, (void**)&ret->nsbody); diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 6ad153a031c..f3ca63babaf 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -1207,13 +1207,10 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject) HTMLDocument_Service_Init(ret); HTMLDocument_Hlink_Init(ret); - ConnectionPoint_Init(&ret->cp_propnotif, CONPTCONT(&ret->cp_container), - &IID_IPropertyNotifySink, NULL); - ConnectionPoint_Init(&ret->cp_htmldocevents, CONPTCONT(&ret->cp_container), - &DIID_HTMLDocumentEvents, &ret->cp_propnotif); - ConnectionPoint_Init(&ret->cp_htmldocevents2, CONPTCONT(&ret->cp_container), - &DIID_HTMLDocumentEvents2, &ret->cp_htmldocevents); - ConnectionPointContainer_Init(&ret->cp_container, &ret->cp_propnotif, (IUnknown*)HTMLDOC(ret)); + ConnectionPointContainer_Init(&ret->cp_container, (IUnknown*)HTMLDOC(ret)); + ConnectionPoint_Init(&ret->cp_propnotif, &ret->cp_container, &IID_IPropertyNotifySink); + ConnectionPoint_Init(&ret->cp_htmldocevents, &ret->cp_container, &DIID_HTMLDocumentEvents); + ConnectionPoint_Init(&ret->cp_htmldocevents2, &ret->cp_container, &DIID_HTMLDocumentEvents2); ret->nscontainer = NSContainer_Create(ret, NULL); ret->window = HTMLWindow_Create(ret); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 55d1a91da4d..b284d86f3c9 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -90,7 +90,7 @@ struct ConnectionPoint { } *sinks; DWORD sinks_size; - IID iid; + const IID *iid; ConnectionPoint *next; }; @@ -372,8 +372,8 @@ void HTMLDocument_Window_Init(HTMLDocument*); void HTMLDocument_Service_Init(HTMLDocument*); void HTMLDocument_Hlink_Init(HTMLDocument*); -void ConnectionPoint_Init(ConnectionPoint*,IConnectionPointContainer*,REFIID,ConnectionPoint*); -void ConnectionPointContainer_Init(ConnectionPointContainer*,ConnectionPoint*,IUnknown*); +void ConnectionPoint_Init(ConnectionPoint*,ConnectionPointContainer*,REFIID); +void ConnectionPointContainer_Init(ConnectionPointContainer*,IUnknown*); void ConnectionPointContainer_Destroy(ConnectionPointContainer*); NSContainer *NSContainer_Create(HTMLDocument*,NSContainer*);