Module: wine Branch: master Commit: 979c9296566a29305f0e4d1d78eb72b54ef91147 URL: http://source.winehq.org/git/wine.git/?a=commit;h=979c9296566a29305f0e4d1d78...
Author: Aric Stewart aric@codeweavers.com Date: Wed Jun 17 17:01:16 2009 +0900
msctf: Implement ITfCompartmentMgr::ClearCompartment.
---
dlls/msctf/compartmentmgr.c | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/msctf/compartmentmgr.c b/dlls/msctf/compartmentmgr.c index ecbe3b1..2e6c798 100644 --- a/dlls/msctf/compartmentmgr.c +++ b/dlls/msctf/compartmentmgr.c @@ -33,6 +33,7 @@ #include "winerror.h" #include "objbase.h" #include "oleauto.h" +#include "olectl.h"
#include "wine/unicode.h" #include "wine/list.h" @@ -140,9 +141,25 @@ static HRESULT WINAPI CompartmentMgr_GetCompartment(ITfCompartmentMgr *iface, static HRESULT WINAPI CompartmentMgr_ClearCompartment(ITfCompartmentMgr *iface, TfClientId tid, REFGUID rguid) { + struct list *cursor; CompartmentMgr *This = (CompartmentMgr *)iface; - FIXME("STUB:(%p)\n",This); - return E_NOTIMPL; + TRACE("(%p) %i %s\n",This,tid,debugstr_guid(rguid)); + + LIST_FOR_EACH(cursor, &This->values) + { + CompartmentValue* value = LIST_ENTRY(cursor,CompartmentValue,entry); + if (IsEqualGUID(rguid,&value->guid)) + { + if (value->owner && tid != value->owner) + return E_UNEXPECTED; + list_remove(cursor); + ITfCompartment_Release(value->compartment); + HeapFree(GetProcessHeap(),0,value); + return S_OK; + } + } + + return CONNECT_E_NOCONNECTION; }
static HRESULT WINAPI CompartmentMgr_EnumCompartments(ITfCompartmentMgr *iface,