2 * ITfThreadMgr implementation
4 * Copyright 2008 Aric Stewart, CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
27 #include "wine/debug.h"
36 #include "wine/unicode.h"
39 #include "msctf_internal.h"
41 WINE_DEFAULT_DEBUG_CHANNEL(msctf
);
43 typedef struct tagACLMulti
{
44 const ITfThreadMgrVtbl
*ThreadMgrVtbl
;
48 static void ThreadMgr_Destructor(ThreadMgr
*This
)
50 TRACE("destroying %p\n", This
);
51 HeapFree(GetProcessHeap(),0,This
);
54 static HRESULT WINAPI
ThreadMgr_QueryInterface(ITfThreadMgr
*iface
, REFIID iid
, LPVOID
*ppvOut
)
56 ThreadMgr
*This
= (ThreadMgr
*)iface
;
59 if (IsEqualIID(iid
, &IID_IUnknown
) || IsEqualIID(iid
, &IID_ITfThreadMgr
))
66 IUnknown_AddRef(iface
);
70 WARN("unsupported interface: %s\n", debugstr_guid(iid
));
74 static ULONG WINAPI
ThreadMgr_AddRef(ITfThreadMgr
*iface
)
76 ThreadMgr
*This
= (ThreadMgr
*)iface
;
77 return InterlockedIncrement(&This
->refCount
);
80 static ULONG WINAPI
ThreadMgr_Release(ITfThreadMgr
*iface
)
82 ThreadMgr
*This
= (ThreadMgr
*)iface
;
85 ret
= InterlockedDecrement(&This
->refCount
);
87 ThreadMgr_Destructor(This
);
91 /*****************************************************
92 * ITfThreadMgr functions
93 *****************************************************/
95 static HRESULT WINAPI
ThreadMgr_fnActivate( ITfThreadMgr
* iface
, TfClientId
*ptid
)
97 ThreadMgr
*This
= (ThreadMgr
*)iface
;
98 FIXME("STUB:(%p)\n",This
);
102 static HRESULT WINAPI
ThreadMgr_fnDeactivate( ITfThreadMgr
* iface
)
104 ThreadMgr
*This
= (ThreadMgr
*)iface
;
105 FIXME("STUB:(%p)\n",This
);
109 static HRESULT WINAPI
ThreadMgr_CreateDocumentMgr( ITfThreadMgr
* iface
, ITfDocumentMgr
112 ThreadMgr
*This
= (ThreadMgr
*)iface
;
113 FIXME("STUB:(%p)\n",This
);
117 static HRESULT WINAPI
ThreadMgr_EnumDocumentMgrs( ITfThreadMgr
* iface
, IEnumTfDocumentMgrs
120 ThreadMgr
*This
= (ThreadMgr
*)iface
;
121 FIXME("STUB:(%p)\n",This
);
125 static HRESULT WINAPI
ThreadMgr_GetFocus( ITfThreadMgr
* iface
, ITfDocumentMgr
128 ThreadMgr
*This
= (ThreadMgr
*)iface
;
129 FIXME("STUB:(%p)\n",This
);
133 static HRESULT WINAPI
ThreadMgr_SetFocus( ITfThreadMgr
* iface
, ITfDocumentMgr
*pdimFocus
)
135 ThreadMgr
*This
= (ThreadMgr
*)iface
;
136 FIXME("STUB:(%p)\n",This
);
140 static HRESULT WINAPI
ThreadMgr_AssociateFocus( ITfThreadMgr
* iface
, HWND hwnd
,
141 ITfDocumentMgr
*pdimNew
, ITfDocumentMgr
**ppdimPrev
)
143 ThreadMgr
*This
= (ThreadMgr
*)iface
;
144 FIXME("STUB:(%p)\n",This
);
148 static HRESULT WINAPI
ThreadMgr_IsThreadFocus( ITfThreadMgr
* iface
, BOOL
*pfThreadFocus
)
150 ThreadMgr
*This
= (ThreadMgr
*)iface
;
151 FIXME("STUB:(%p)\n",This
);
155 static HRESULT WINAPI
ThreadMgr_GetFunctionProvider( ITfThreadMgr
* iface
, REFCLSID clsid
,
156 ITfFunctionProvider
**ppFuncProv
)
158 ThreadMgr
*This
= (ThreadMgr
*)iface
;
159 FIXME("STUB:(%p)\n",This
);
163 static HRESULT WINAPI
ThreadMgr_EnumFunctionProviders( ITfThreadMgr
* iface
,
164 IEnumTfFunctionProviders
**ppEnum
)
166 ThreadMgr
*This
= (ThreadMgr
*)iface
;
167 FIXME("STUB:(%p)\n",This
);
171 static HRESULT WINAPI
ThreadMgr_GetGlobalCompartment( ITfThreadMgr
* iface
,
172 ITfCompartmentMgr
**ppCompMgr
)
174 ThreadMgr
*This
= (ThreadMgr
*)iface
;
175 FIXME("STUB:(%p)\n",This
);
179 static const ITfThreadMgrVtbl ThreadMgr_ThreadMgrVtbl
=
181 ThreadMgr_QueryInterface
,
185 ThreadMgr_fnActivate
,
186 ThreadMgr_fnDeactivate
,
187 ThreadMgr_CreateDocumentMgr
,
188 ThreadMgr_EnumDocumentMgrs
,
191 ThreadMgr_AssociateFocus
,
192 ThreadMgr_IsThreadFocus
,
193 ThreadMgr_GetFunctionProvider
,
194 ThreadMgr_EnumFunctionProviders
,
195 ThreadMgr_GetGlobalCompartment
198 HRESULT
ThreadMgr_Constructor(IUnknown
*pUnkOuter
, IUnknown
**ppOut
)
202 return CLASS_E_NOAGGREGATION
;
204 This
= HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY
,sizeof(ThreadMgr
));
206 return E_OUTOFMEMORY
;
208 This
->ThreadMgrVtbl
= &ThreadMgr_ThreadMgrVtbl
;
211 TRACE("returning %p\n", This
);
212 *ppOut
= (IUnknown
*)This
;