ReactOS 0.4.16-dev-1537-g4e425b5
msctf.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: MSCTF Server DLL
5 * COPYRIGHT: Copyright 2008 Aric Stewart, CodeWeavers
6 * Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#include "precomp.h"
10
11#include <wine/debug.h>
13
15
16typedef struct
17{
22
23typedef struct {
30
31typedef struct
32{
33 struct list entry;
35} AtsEntry;
36
40
41static struct list AtsList = LIST_INIT(AtsList);
42static UINT activated = 0;
43
46
47typedef HRESULT (*LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut);
48
49static const struct {
50 const CLSID *clsid;
52} ClassesTable[] = {
58 {NULL, NULL}
59};
60
62 : public IClassFactory
63{
64public:
66 virtual ~CClassFactory();
67
68 // ** IUnknown methods **
69 STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override;
72
73 // ** IClassFactory methods **
75 _In_ IUnknown *pUnkOuter,
77 _Out_ void **ppvObject) override;
78 STDMETHODIMP LockServer(_In_ BOOL fLock) override;
79
80protected:
83};
84
86 : m_cRefs(1)
87 , m_ctor(ctor)
88{
89}
90
92{
93 TRACE("Destroying class factory %p\n", this);
94}
95
97{
98 *ppvObj = NULL;
100 {
101 AddRef();
102 *ppvObj = static_cast<IClassFactory *>(this);
103 return S_OK;
104 }
105
106 WARN("Unknown interface %s\n", debugstr_guid(&riid));
107 return E_NOINTERFACE;
108}
109
111{
112 return ::InterlockedIncrement(&m_cRefs);
113}
114
116{
118 if (!ret)
119 delete this;
120 return ret;
121}
122
124 _In_ IUnknown *pUnkOuter,
126 _Out_ void **ppvObject)
127{
128 TRACE("(%p, %p, %s, %p)\n", this, pUnkOuter, debugstr_guid(&riid), ppvObject);
129
130 IUnknown *obj;
131 HRESULT ret = m_ctor(pUnkOuter, &obj);
132 if (FAILED(ret))
133 return ret;
134 ret = obj->QueryInterface(riid, ppvObject);
135 obj->Release();
136 return ret;
137}
138
140{
141 TRACE("(%p)->(%x)\n", this, fLock);
142 return S_OK;
143}
144
146{
148 *ppvOut = static_cast<IClassFactory *>(This);
149 TRACE("Created class factory %p\n", This);
150 return S_OK;
151}
152
153/*************************************************************************
154 * DWORD Cookie Management
155 */
158{
159 UINT i;
160
161 /* try to reuse IDs if possible */
162 for (i = 0; i < id_last; i++)
163 if (cookies[i].id == 0) break;
164
165 if (i == array_size)
166 {
167 if (!array_size)
168 {
170 if (!cookies)
171 {
172 ERR("Out of memory, Unable to alloc cookies array\n");
173 return 0;
174 }
175 array_size = 10;
176 }
177 else
178 {
179 ERR("cookies: %p, array_size: %d\n", cookies, array_size);
180 CookieInternal *new_cookies = (CookieInternal *)
182 if (!new_cookies)
183 {
184 ERR("Out of memory, Unable to realloc cookies array\n");
185 return 0;
186 }
187 cookies = new_cookies;
188 array_size *= 2;
189 }
190 }
191
192 cookies[i].id = i + 1; /* a return of 0 is used for failure */
193 cookies[i].magic = magic;
194 cookies[i].data = data;
195
196 if (i == id_last)
197 id_last++;
198
199 return cookies[i].id;
200}
201
204{
205 UINT index = id - 1;
206
207 if (index >= id_last)
208 return 0;
209
210 if (cookies[index].id == 0)
211 return 0;
212
213 return cookies[index].magic;
214}
215
218{
219 UINT index = id - 1;
220
221 if (index >= id_last)
222 return NULL;
223
224 if (cookies[index].id == 0)
225 return NULL;
226
227 return cookies[index].data;
228}
229
232{
233 UINT index = id - 1;
234
235 if (index >= id_last)
236 return NULL;
237
238 if (cookies[index].id == 0)
239 return NULL;
240
241 cookies[index].id = 0;
242 return cookies[index].data;
243}
244
247{
248 unsigned int i;
249 for (i = *index; i < id_last; i++)
250 if (cookies[i].id != 0 && cookies[i].magic == magic)
251 {
252 *index = (i+1);
253 return cookies[i].id;
254 }
255 return 0x0;
256}
257
259HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie)
260{
261 Sink *sink = (Sink *)cicMemAlloc(sizeof(*sink));
262 if (!sink)
263 return E_OUTOFMEMORY;
264
265 HRESULT hr = unk->QueryInterface(riid, (void **)&sink->interfaces.pIUnknown);
266 if (FAILED(hr))
267 {
270 }
271
272 list_add_head(sink_list, &sink->entry);
273 *cookie = generate_Cookie(cookie_magic, sink);
274 TRACE("cookie %x\n", *cookie);
275 return S_OK;
276}
277
278static void free_sink(Sink *sink)
279{
280 list_remove(&sink->entry);
281 sink->interfaces.pIUnknown->Release();
283}
284
287{
289 if (!sink)
291
293 return S_OK;
294}
295
297void free_sinks(struct list *sink_list)
298{
299 while(!list_empty(sink_list))
300 {
301 Sink* sink = LIST_ENTRY(sink_list->next, Sink, entry);
303 }
304}
305
306/*****************************************************************************
307 * Active Text Service Management
308 *****************************************************************************/
310{
311 HRESULT hr;
312
313 /* Already Active? */
314 if (actsvr->pITfTextInputProcessor)
315 return S_OK;
316
317 hr = CoCreateInstance(actsvr->LanguageProfile.clsid, NULL, CLSCTX_INPROC_SERVER,
318 IID_ITfTextInputProcessor, (void **)&actsvr->pITfTextInputProcessor);
319 if (FAILED(hr)) return hr;
320
321 hr = actsvr->pITfTextInputProcessor->Activate((ITfThreadMgr *)tm, actsvr->tid);
322 if (FAILED(hr))
323 {
326 return hr;
327 }
328
329 actsvr->pITfThreadMgrEx = tm;
330 tm->AddRef();
331 return hr;
332}
333
335{
336 HRESULT hr = S_OK;
337
338 if (actsvr->pITfTextInputProcessor)
339 {
342 actsvr->pITfThreadMgrEx->Release();
344 actsvr->pITfThreadMgrEx = NULL;
345 }
346
347 return hr;
348}
349
351{
352 AtsEntry *ats, *cursor2;
353
355 {
356 if (catid == ats->ats->LanguageProfile.catid)
357 {
359 list_remove(&ats->entry);
360 cicMemFree(ats->ats);
361 cicMemFree(ats);
362 /* we are guaranteeing there is only 1 */
363 break;
364 }
365 }
366}
367
370{
371 ActivatedTextService *actsvr;
372 ITfCategoryMgr *catmgr;
375 ITfClientId *clientid;
376
377 if (!tm)
378 return E_UNEXPECTED;
379
381 if (!actsvr)
382 return E_OUTOFMEMORY;
383
384 tm->QueryInterface(IID_ITfClientId, (void **)&clientid);
385 clientid->GetClientId(lp->clsid, &actsvr->tid);
386 clientid->Release();
387
388 if (!actsvr->tid)
389 {
390 cicMemFree(actsvr);
391 return E_OUTOFMEMORY;
392 }
393
395 actsvr->LanguageProfile = *lp;
396 actsvr->pITfKeyEventSink = NULL;
397
398 /* get TIP category */
400 {
402
403 catmgr->FindClosestCategory(actsvr->LanguageProfile.clsid, &actsvr->LanguageProfile.catid, list, 3);
404 catmgr->Release();
405 }
406 else
407 {
408 ERR("CategoryMgr construction failed\n");
410 }
411
412 if (actsvr->LanguageProfile.catid != GUID_NULL)
414
415 if (activated > 0)
416 activate_given_ts(actsvr, tm);
417
418 entry = (AtsEntry *)cicMemAlloc(sizeof(AtsEntry));
419 if (!entry)
420 {
421 cicMemFree(actsvr);
422 return E_OUTOFMEMORY;
423 }
424
425 entry->ats = actsvr;
426 list_add_head(&AtsList, &entry->entry);
427
428 return S_OK;
429}
430
433{
434 AtsEntry *ats;
435
437 {
438 if (rclsid == ats->ats->LanguageProfile.clsid)
439 {
440 if (profile)
441 *profile = ats->ats->LanguageProfile;
442 return TRUE;
443 }
444 }
445 return FALSE;
446}
447
450{
451 HRESULT hr = S_OK;
452 AtsEntry *ats;
453
454 activated ++;
455 if (activated > 1)
456 return S_OK;
457
459 {
460 hr = activate_given_ts(ats->ats, tm);
461 if (FAILED(hr))
462 FIXME("Failed to activate text service\n");
463 }
464 return hr;
465}
466
469{
470 AtsEntry *ats;
471
472 if (activated > 0)
473 activated --;
474
475 if (activated == 0)
476 {
479 }
480 return S_OK;
481}
482
485{
486 AtsEntry *ats;
487
489 {
490 if (ats->ats->tid == tid)
491 return ats->ats->LanguageProfile.clsid;
492 }
493 return GUID_NULL;
494}
495
498{
499 AtsEntry *ats;
500
501 if (iid != IID_ITfKeyEventSink)
502 return E_NOINTERFACE;
503
505 {
506 if (ats->ats->tid == tid)
507 {
509 return S_OK;
510 }
511 }
512
513 return E_FAIL;
514}
515
518{
519 AtsEntry *ats;
520
521 if (iid != IID_ITfKeyEventSink)
522 return E_NOINTERFACE;
523
525 {
526 if (ats->ats->tid == tid)
527 {
529 return S_OK;
530 }
531 }
532
533 return E_FAIL;
534}
535
536/*************************************************************************
537 * MSCTF DllMain
538 */
540{
541 TRACE("%p 0x%x %p\n", hinst, fdwReason, fImpLoad);
542 switch (fdwReason)
543 {
546 return ProcessAttach(hinst);
547
550 break;
551 }
552 return TRUE;
553}
554
555/*************************************************************************
556 * DllCanUnloadNow (MSCTF.@)
557 */
559{
560 return S_FALSE;
561}
562
563/***********************************************************************
564 * DllGetClassObject (MSCTF.@)
565 */
567{
568 int i;
569
570 *ppvOut = NULL;
571 if (iid != IID_IUnknown && iid != IID_IClassFactory)
572 return E_NOINTERFACE;
573
574 for (i = 0; ClassesTable[i].clsid; i++)
575 {
576 if (*ClassesTable[i].clsid == clsid)
578 }
579 FIXME("CLSID %s not supported\n", debugstr_guid(&clsid));
581}
582
583/***********************************************************************
584 * DllRegisterServer (MSCTF.@)
585 */
587{
589}
590
591/***********************************************************************
592 * DllUnregisterServer (MSCTF.@)
593 */
595{
597}
598
599/***********************************************************************
600 * TF_CreateThreadMgr (MSCTF.@)
601 */
603{
604 TRACE("\n");
605 return ThreadMgr_Constructor(NULL, (IUnknown**)pptim);
606}
607
608/***********************************************************************
609 * TF_GetThreadMgr (MSCTF.@)
610 */
612{
613 TRACE("\n");
615
616 if (*pptim)
617 (*pptim)->AddRef();
618
619 return S_OK;
620}
621
622/***********************************************************************
623 * SetInputScope(MSCTF.@)
624 */
626{
627 FIXME("STUB: %p %i\n", hwnd, inputscope);
628 return S_OK;
629}
630
631/***********************************************************************
632 * SetInputScopes(MSCTF.@)
633 */
635 UINT cInputScopes, WCHAR **ppszPhraseList,
636 UINT cPhrases, WCHAR *pszRegExp, WCHAR *pszSRGS)
637{
638 UINT i;
639 FIXME("STUB: %p ... %s %s\n", hwnd, debugstr_w(pszRegExp), debugstr_w(pszSRGS));
640 for (i = 0; i < cInputScopes; i++)
641 TRACE("\tScope[%u] = %i\n", i, pInputScopes[i]);
642 for (i = 0; i < cPhrases; i++)
643 TRACE("\tPhrase[%u] = %s\n", i, debugstr_w(ppszPhraseList[i]));
644
645 return S_OK;
646}
647
648/***********************************************************************
649 * TF_CreateInputProcessorProfiles(MSCTF.@)
650 */
652 ITfInputProcessorProfiles **ppipr)
653{
655}
656
657/***********************************************************************
658 * TF_InvalidAssemblyListCacheIfExist(MSCTF.@)
659 */
661{
662 FIXME("Stub\n");
663 return S_OK;
664}
665
666/***********************************************************************
667 * TF_CreateLangBarMgr (MSCTF.@)
668 */
670{
671 TRACE("\n");
672 return LangBarMgr_Constructor(NULL, (IUnknown**)pppbm);
673}
674
675/***********************************************************************
676 * TF_CreateLangBarItemMgr (MSCTF.@)
677 */
679{
680 FIXME("stub %p\n", pplbim);
681 *pplbim = NULL;
682
683 return E_NOTIMPL;
684}
static DWORD const fdwReason
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define index(s, c)
Definition: various.h:29
HRESULT __wine_unregister_resources(HMODULE module)
Definition: register.c:110
HRESULT ThreadMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
Definition: threadmgr.cpp:1388
BOOL ProcessAttach(HINSTANCE hinstDLL)
@unimplemented
Definition: utils.cpp:766
VOID ProcessDetach(HINSTANCE hinstDLL)
@unimplemented
Definition: utils.cpp:840
HRESULT __wine_register_resources(HMODULE module)
Definition: register.c:98
DWORD g_dwTLSIndex
Definition: utils.cpp:33
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
DWORD LPVOID fImpLoad
Definition: misc.cpp:136
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHODIMP_(t)
Definition: basetyps.h:44
const GUID IID_IUnknown
const GUID IID_IClassFactory
EXTERN_C HRESULT CategoryMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
LPVOID cicMemReCalloc(LPVOID mem, SIZE_T num, SIZE_T size) noexcept
Definition: cicbase.cpp:41
static LPVOID cicMemAlloc(SIZE_T size)
Definition: cicbase.h:10
#define cicNoThrow
Definition: cicbase.h:46
static void cicMemFree(LPVOID ptr)
Definition: cicbase.h:20
static LPVOID cicMemAllocClear(SIZE_T size)
Definition: cicbase.h:15
LONG m_cRefs
Definition: msctf.cpp:81
STDMETHODIMP_(ULONG) Release() override
LPFNCONSTRUCTOR m_ctor
Definition: msctf.cpp:82
STDMETHODIMP LockServer(_In_ BOOL fLock) override
Definition: msctf.cpp:139
STDMETHODIMP_(ULONG) AddRef() override
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override
Definition: msctf.cpp:96
STDMETHODIMP CreateInstance(_In_ IUnknown *pUnkOuter, _In_ REFIID riid, _Out_ void **ppvObject) override
Definition: msctf.cpp:123
virtual ~CClassFactory()
Definition: msctf.cpp:91
CClassFactory(LPFNCONSTRUCTOR ctor)
Definition: msctf.cpp:85
Definition: list.h:37
struct list * next
Definition: list.h:38
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
EXTERN_C HRESULT DisplayAttributeMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint index
Definition: glext.h:6031
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID riid
Definition: atlbase.h:39
static CInternetFolder * CreateInstance(void)
Definition: inetfolder.c:330
static TfClientId tid
EXTERN_C HRESULT InputProcessorProfiles_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
InputScope
Definition: inputscope.idl:10
HRESULT FindClosestCategory([in] REFGUID rguid, [out] GUID *pcatid, [in, size_is(ulCount)] const GUID **ppcatidList, [in] ULONG ulCount)
HRESULT GetClientId([in] REFCLSID rclsid, [out] TfClientId *ptid)
HRESULT Activate([in] ITfThreadMgr *ptim, [in] TfClientId tid)
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
nsrefcnt AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
#define profile
Definition: kernel32.h:12
#define debugstr_w
Definition: kernel32.h:32
#define GUID_NULL
Definition: ks.h:106
EXTERN_C HRESULT LangBarMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
Definition: langbarmgr.cpp:248
static HINSTANCE hinst
Definition: edit.c:551
EXTERN_C HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie)
Definition: msctf.cpp:259
static UINT id_last
Definition: msctf.cpp:38
ITfCompartmentMgr * g_globalCompartmentMgr
Definition: msctf.cpp:45
HRESULT WINAPI DllRegisterServer(void)
Definition: msctf.cpp:586
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, LPVOID *ppvOut)
Definition: msctf.cpp:566
EXTERN_C DWORD get_Cookie_magic(DWORD id)
Definition: msctf.cpp:203
LPFNCONSTRUCTOR ctor
Definition: msctf.cpp:51
EXTERN_C LPVOID get_Cookie_data(DWORD id)
Definition: msctf.cpp:217
EXTERN_C HRESULT set_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown *sink)
Definition: msctf.cpp:517
static UINT activated
Definition: msctf.cpp:42
HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr)
Definition: msctf.cpp:651
HRESULT(* LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut)
Definition: msctf.cpp:47
HRESULT WINAPI TF_CreateLangBarItemMgr(ITfLangBarItemMgr **pplbim)
Definition: msctf.cpp:678
EXTERN_C DWORD enumerate_Cookie(DWORD magic, DWORD *index)
Definition: msctf.cpp:246
EXTERN_C HRESULT unadvise_sink(DWORD cookie)
Definition: msctf.cpp:286
HRESULT WINAPI DllUnregisterServer(void)
Definition: msctf.cpp:594
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
Definition: msctf.cpp:539
HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim)
Definition: msctf.cpp:602
EXTERN_C DWORD generate_Cookie(DWORD magic, LPVOID data)
Definition: msctf.cpp:157
static void free_sink(Sink *sink)
Definition: msctf.cpp:278
TfClientId g_processId
Definition: msctf.cpp:44
HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim)
Definition: msctf.cpp:611
const CLSID * clsid
Definition: msctf.cpp:50
static CookieInternal * cookies
Definition: msctf.cpp:37
EXTERN_C HRESULT deactivate_textservices(void)
Definition: msctf.cpp:468
static UINT array_size
Definition: msctf.cpp:39
static HRESULT deactivate_given_ts(ActivatedTextService *actsvr)
Definition: msctf.cpp:334
EXTERN_C LPVOID remove_Cookie(DWORD id)
Definition: msctf.cpp:231
static const struct @38 ClassesTable[]
static HINSTANCE MSCTF_hinstance
Definition: msctf.cpp:14
static struct list AtsList
Definition: msctf.cpp:41
HRESULT WINAPI SetInputScope(HWND hwnd, InputScope inputscope)
Definition: msctf.cpp:625
HRESULT WINAPI SetInputScopes(HWND hwnd, const InputScope *pInputScopes, UINT cInputScopes, WCHAR **ppszPhraseList, UINT cPhrases, WCHAR *pszRegExp, WCHAR *pszSRGS)
Definition: msctf.cpp:634
HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm)
Definition: msctf.cpp:669
EXTERN_C void free_sinks(struct list *sink_list)
Definition: msctf.cpp:297
HRESULT WINAPI DllCanUnloadNow(void)
Definition: msctf.cpp:558
EXTERN_C HRESULT add_active_textservice(TF_LANGUAGEPROFILE *lp)
Definition: msctf.cpp:369
static HRESULT activate_given_ts(ActivatedTextService *actsvr, ITfThreadMgrEx *tm)
Definition: msctf.cpp:309
EXTERN_C BOOL get_active_textservice(REFCLSID rclsid, TF_LANGUAGEPROFILE *profile)
Definition: msctf.cpp:432
EXTERN_C HRESULT activate_textservices(ITfThreadMgrEx *tm)
Definition: msctf.cpp:449
static HRESULT ClassFactory_Constructor(LPFNCONSTRUCTOR ctor, LPVOID *ppvOut)
Definition: msctf.cpp:145
HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(void)
Definition: msctf.cpp:660
static void deactivate_remove_conflicting_ts(REFCLSID catid)
Definition: msctf.cpp:350
EXTERN_C CLSID get_textservice_clsid(TfClientId tid)
Definition: msctf.cpp:484
EXTERN_C HRESULT get_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown **sink)
Definition: msctf.cpp:497
EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles
Definition: msctf.idl:64
EXTERN_C const CLSID CLSID_TF_LangBarMgr
Definition: msctf.idl:65
EXTERN_C const CLSID CLSID_TF_ThreadMgr
Definition: msctf.idl:63
DWORD TfClientId
Definition: msctf.idl:87
EXTERN_C const CLSID CLSID_TF_CategoryMgr
Definition: msctf.idl:66
GUID catid
Definition: msctf.idl:629
EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD
Definition: msctf.idl:81
EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr
Definition: msctf.idl:67
EXTERN_C const GUID GUID_TFCAT_TIP_SPEECH
Definition: msctf.idl:82
EXTERN_C const GUID GUID_TFCAT_TIP_HANDWRITING
Definition: msctf.idl:83
const GUID IID_IUnknown
const GUID IID_IClassFactory
unsigned int UINT
Definition: ndis.h:50
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define CONNECT_E_CANNOTCONNECT
Definition: olectl.h:253
#define CONNECT_E_NOCONNECTION
Definition: olectl.h:251
long LONG
Definition: pedump.c:60
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
TF_LANGUAGEPROFILE LanguageProfile
Definition: msctf.cpp:24
ITfTextInputProcessor * pITfTextInputProcessor
Definition: msctf.cpp:25
ITfKeyEventSink * pITfKeyEventSink
Definition: msctf.cpp:27
TfClientId tid
Definition: msctf.cpp:28
ITfThreadMgrEx * pITfThreadMgrEx
Definition: msctf.cpp:26
struct list entry
Definition: msctf.cpp:33
ActivatedTextService * ats
Definition: msctf.cpp:34
DWORD id
Definition: msctf.cpp:18
LPVOID data
Definition: msctf.cpp:20
DWORD magic
Definition: msctf.cpp:19
Definition: precomp.h:83
Definition: cookie.c:34
Definition: time.h:68
#define LIST_INIT(head)
Definition: queue.h:197
#define LIST_ENTRY(type)
Definition: queue.h:175
uint32_t ULONG
Definition: typedefs.h:59
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3452
#define E_NOINTERFACE
Definition: winerror.h:3480
#define E_UNEXPECTED
Definition: winerror.h:3529
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3773
__wchar_t WCHAR
Definition: xmlstorage.h:180