Module: wine Branch: master Commit: b9956f75a9d1f8ed3fb985afd444951c83404423 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b9956f75a9d1f8ed3fb985afd4...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sat Oct 23 17:40:06 2010 +0400
msxml3: Add ::Unadvise().
---
dlls/msxml3/domdoc.c | 25 +++++++++++++++++++++---- 1 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index 1e09a09..a465e75 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -91,6 +91,14 @@ struct ConnectionPoint ConnectionPoint *next; IConnectionPointContainer *container; domdoc *doc; + + union + { + IUnknown *unk; + IDispatch *disp; + IPropertyNotifySink *propnotif; + } *sinks; + DWORD sinks_size; };
struct domdoc @@ -2929,11 +2937,19 @@ static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown * return E_NOTIMPL; }
-static HRESULT WINAPI ConnectionPoint_Unadvise(IConnectionPoint *iface, DWORD dwCookie) +static HRESULT WINAPI ConnectionPoint_Unadvise(IConnectionPoint *iface, DWORD cookie) { ConnectionPoint *This = impl_from_IConnectionPoint(iface); - FIXME("(%p)->(%d): stub\n", This, dwCookie); - return E_NOTIMPL; + + TRACE("(%p)->(%d)\n", This, cookie); + + if (cookie == 0 || cookie > This->sinks_size || !This->sinks[cookie-1].unk) + return CONNECT_E_NOCONNECTION; + + IUnknown_Release(This->sinks[cookie-1].unk); + This->sinks[cookie-1].unk = NULL; + + return S_OK; }
static HRESULT WINAPI ConnectionPoint_EnumConnections(IConnectionPoint *iface, @@ -2961,7 +2977,8 @@ void ConnectionPoint_Init(ConnectionPoint *cp, struct domdoc *doc, REFIID riid) cp->lpVtblConnectionPoint = &ConnectionPointVtbl; cp->doc = doc; cp->iid = riid; - cp->next = NULL; + cp->sinks = NULL; + cp->sinks_size = 0;
cp->next = doc->cp_list; doc->cp_list = cp;