Module: wine Branch: master Commit: 6de3e39aa440cdb75fdfd1071d164cd7445cc24f URL: http://source.winehq.org/git/wine.git/?a=commit;h=6de3e39aa440cdb75fdfd1071d...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jan 3 11:45:54 2013 +0100
atl100: Added AtlUnadvise implementation.
---
dlls/atl100/atl.c | 20 ++++++++++++++++++-- dlls/atl100/tests/atl.c | 13 +++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/dlls/atl100/atl.c b/dlls/atl100/atl.c index 00d62de..4e2ba9f 100644 --- a/dlls/atl100/atl.c +++ b/dlls/atl100/atl.c @@ -68,8 +68,24 @@ HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID *iid, DWORD */ HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID *iid, DWORD dw) { - FIXME("%p %p %d\n", pUnkCP, iid, dw); - return S_OK; + IConnectionPointContainer *container; + IConnectionPoint *cp; + HRESULT hres; + + TRACE("%p %p %d\n", pUnkCP, iid, dw); + + hres = IUnknown_QueryInterface(pUnkCP, &IID_IConnectionPointContainer, (void**)&container); + if(FAILED(hres)) + return hres; + + hres = IConnectionPointContainer_FindConnectionPoint(container, iid, &cp); + IConnectionPointContainer_Release(container); + if(FAILED(hres)) + return hres; + + hres = IConnectionPoint_Unadvise(cp, dw); + IConnectionPoint_Release(cp); + return hres; }
/*********************************************************************** diff --git a/dlls/atl100/tests/atl.c b/dlls/atl100/tests/atl.c index 8b5edae..963b39e 100644 --- a/dlls/atl100/tests/atl.c +++ b/dlls/atl100/tests/atl.c @@ -242,18 +242,22 @@ static HRESULT WINAPI ConnectionPoint_GetConnectionPointContainer(IConnectionPoi return E_NOTIMPL; }
+static int advise_cnt; + static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown *pUnkSink, DWORD *pdwCookie) { ok(pUnkSink == (IUnknown*)0xdead0000, "pUnkSink = %p\n", pUnkSink); *pdwCookie = 0xdeadbeef; + advise_cnt++; return S_OK; }
static HRESULT WINAPI ConnectionPoint_Unadvise(IConnectionPoint *iface, DWORD dwCookie) { - ok(0, "unexpected call\n"); - return E_NOTIMPL; + ok(dwCookie == 0xdeadbeef, "dwCookie = %x\n", dwCookie); + advise_cnt--; + return S_OK; }
static HRESULT WINAPI ConnectionPoint_EnumConnections(IConnectionPoint *iface, @@ -332,6 +336,11 @@ static void test_cp(void) hres = AtlAdvise((IUnknown*)&ConnectionPointContainer, (IUnknown*)0xdead0000, &CLSID_Test, &cookie); ok(hres == S_OK, "AtlAdvise failed: %08x\n", hres); ok(cookie == 0xdeadbeef, "cookie = %x\n", cookie); + ok(advise_cnt == 1, "advise_cnt = %d\n", advise_cnt); + + hres = AtlUnadvise((IUnknown*)&ConnectionPointContainer, &CLSID_Test, 0xdeadbeef); + ok(hres == S_OK, "AtlUnadvise failed: %08x\n", hres); + ok(!advise_cnt, "advise_cnt = %d\n", advise_cnt); }
START_TEST(atl)