Module: wine Branch: master Commit: a1bdef2d62ca0575c0a8ca7d03ef7bdb73cda25c URL: http://source.winehq.org/git/wine.git/?a=commit;h=a1bdef2d62ca0575c0a8ca7d03...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Dec 4 13:36:27 2007 +0100
mshtml: Make IConnectionPointContainer more flexible.
---
dlls/mshtml/conpoint.c | 24 +++++++++++------------- dlls/mshtml/htmlbody.c | 8 +++----- dlls/mshtml/htmldoc.c | 11 ++++------- dlls/mshtml/mshtml_private.h | 6 +++--- 4 files changed, 21 insertions(+), 28 deletions(-)
diff --git a/dlls/mshtml/conpoint.c b/dlls/mshtml/conpoint.c index b5c969c..a8e3d56 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 e475d5d..b1b6c4c 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 6ad153a..f3ca63b 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 55d1a91..b284d86 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*);