Nikolay Sivov : msxml3: Add ::Unadvise().
Alexandre Julliard
julliard at winehq.org
Mon Oct 25 10:58:25 CDT 2010
Module: wine
Branch: master
Commit: b9956f75a9d1f8ed3fb985afd444951c83404423
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b9956f75a9d1f8ed3fb985afd444951c83404423
Author: Nikolay Sivov <nsivov at 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;
More information about the wine-cvs
mailing list