[PATCH 05/12] Add ::Unadvise()

Nikolay Sivov nsivov at codeweavers.com
Sat Oct 23 08:40:06 CDT 2010


---
 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 14a0760..b6c338f 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
@@ -2922,11 +2930,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,
@@ -2954,7 +2970,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;
-- 
1.5.6.5



--------------030300060206020503030008--



More information about the wine-patches mailing list