ReactOS  0.4.13-dev-92-gf251225
msctf.c
Go to the documentation of this file.
1 /*
2  * MSCTF Server DLL
3  *
4  * Copyright 2008 Aric Stewart, CodeWeavers
5  *
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.
10  *
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.
15  *
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
19  */
20 
21 #include "config.h"
22 
23 #include <stdarg.h>
24 #include <stdio.h>
25 
26 #define COBJMACROS
27 
28 #include "wine/debug.h"
29 #include "windef.h"
30 #include "winbase.h"
31 #include "winreg.h"
32 #include "shlwapi.h"
33 #include "shlguid.h"
34 #include "comcat.h"
35 #include "olectl.h"
36 #include "rpcproxy.h"
37 #include "msctf.h"
38 #include "inputscope.h"
39 
40 #include "msctf_internal.h"
41 
43 
45 
46 typedef struct
47 {
52 
53 typedef struct {
60 
61 typedef struct
62 {
63  struct list entry;
65 } AtsEntry;
66 
68 static UINT id_last;
70 
71 static struct list AtsList = LIST_INIT(AtsList);
72 static UINT activated = 0;
73 
77 
78 const WCHAR szwSystemTIPKey[] = {'S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','C','T','F','\\','T','I','P',0};
79 const WCHAR szwSystemCTFKey[] = {'S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','C','T','F',0};
80 
81 typedef HRESULT (*LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut);
82 
83 static const struct {
86 } ClassesTable[] = {
92  {NULL, NULL}
93 };
94 
95 typedef struct tagClassFactory
96 {
100 } ClassFactory;
101 
103 {
104  return CONTAINING_RECORD(iface, ClassFactory, IClassFactory_iface);
105 }
106 
108 {
109  TRACE("Destroying class factory %p\n", This);
111 }
112 
114 {
115  *ppvOut = NULL;
117  IClassFactory_AddRef(iface);
118  *ppvOut = iface;
119  return S_OK;
120  }
121 
122  WARN("Unknown interface %s\n", debugstr_guid(riid));
123  return E_NOINTERFACE;
124 }
125 
127 {
129  return InterlockedIncrement(&This->ref);
130 }
131 
133 {
136 
137  if (ret == 0)
139  return ret;
140 }
141 
143 {
145  HRESULT ret;
146  IUnknown *obj;
147 
148  TRACE("(%p, %p, %s, %p)\n", iface, punkOuter, debugstr_guid(iid), ppvOut);
149  ret = This->ctor(punkOuter, &obj);
150  if (FAILED(ret))
151  return ret;
152  ret = IUnknown_QueryInterface(obj, iid, ppvOut);
153  IUnknown_Release(obj);
154  return ret;
155 }
156 
158 {
160 
161  TRACE("(%p)->(%x)\n", This, fLock);
162 
163  return S_OK;
164 }
165 
166 static const IClassFactoryVtbl ClassFactoryVtbl = {
167  /* IUnknown */
171 
172  /* IClassFactory*/
175 };
176 
178 {
180  This->IClassFactory_iface.lpVtbl = &ClassFactoryVtbl;
181  This->ref = 1;
182  This->ctor = ctor;
183  *ppvOut = &This->IClassFactory_iface;
184  TRACE("Created class factory %p\n", This);
185  return S_OK;
186 }
187 
188 /*************************************************************************
189  * DWORD Cookie Management
190  */
192 {
193  UINT i;
194 
195  /* try to reuse IDs if possible */
196  for (i = 0; i < id_last; i++)
197  if (cookies[i].id == 0) break;
198 
199  if (i == array_size)
200  {
201  if (!array_size)
202  {
204  if (!cookies)
205  {
206  ERR("Out of memory, Unable to alloc cookies array\n");
207  return 0;
208  }
209  array_size = 10;
210  }
211  else
212  {
214  sizeof(CookieInternal) * (array_size * 2));
215  if (!new_cookies)
216  {
217  ERR("Out of memory, Unable to realloc cookies array\n");
218  return 0;
219  }
220  cookies = new_cookies;
221  array_size *= 2;
222  }
223  }
224 
225  cookies[i].id = i + 1; /* a return of 0 is used for failure */
226  cookies[i].magic = magic;
227  cookies[i].data = data;
228 
229  if (i == id_last)
230  id_last++;
231 
232  return cookies[i].id;
233 }
234 
236 {
237  UINT index = id - 1;
238 
239  if (index >= id_last)
240  return 0;
241 
242  if (cookies[index].id == 0)
243  return 0;
244 
245  return cookies[index].magic;
246 }
247 
249 {
250  UINT index = id - 1;
251 
252  if (index >= id_last)
253  return NULL;
254 
255  if (cookies[index].id == 0)
256  return NULL;
257 
258  return cookies[index].data;
259 }
260 
262 {
263  UINT index = id - 1;
264 
265  if (index >= id_last)
266  return NULL;
267 
268  if (cookies[index].id == 0)
269  return NULL;
270 
271  cookies[index].id = 0;
272  return cookies[index].data;
273 }
274 
276 {
277  unsigned int i;
278  for (i = *index; i < id_last; i++)
279  if (cookies[i].id != 0 && cookies[i].magic == magic)
280  {
281  *index = (i+1);
282  return cookies[i].id;
283  }
284  return 0x0;
285 }
286 
287 HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie)
288 {
289  Sink *sink;
290 
291  sink = HeapAlloc(GetProcessHeap(), 0, sizeof(*sink));
292  if (!sink)
293  return E_OUTOFMEMORY;
294 
295  if (FAILED(IUnknown_QueryInterface(unk, riid, (void**)&sink->interfaces.pIUnknown)))
296  {
299  }
300 
301  list_add_head(sink_list, &sink->entry);
302  *cookie = generate_Cookie(cookie_magic, sink);
303  TRACE("cookie %x\n", *cookie);
304  return S_OK;
305 }
306 
307 static void free_sink(Sink *sink)
308 {
309  list_remove(&sink->entry);
310  IUnknown_Release(sink->interfaces.pIUnknown);
312 }
313 
315 {
316  Sink *sink;
317 
318  sink = remove_Cookie(cookie);
319  if (!sink)
320  return CONNECT_E_NOCONNECTION;
321 
322  free_sink(sink);
323  return S_OK;
324 }
325 
326 void free_sinks(struct list *sink_list)
327 {
328  while(!list_empty(sink_list))
329  {
330  Sink* sink = LIST_ENTRY(sink_list->next, Sink, entry);
331  free_sink(sink);
332  }
333 }
334 
335 /*****************************************************************************
336  * Active Text Service Management
337  *****************************************************************************/
339 {
340  HRESULT hr;
341 
342  /* Already Active? */
343  if (actsvr->pITfTextInputProcessor)
344  return S_OK;
345 
346  hr = CoCreateInstance (&actsvr->LanguageProfile.clsid, NULL, CLSCTX_INPROC_SERVER,
347  &IID_ITfTextInputProcessor, (void**)&actsvr->pITfTextInputProcessor);
348  if (FAILED(hr)) return hr;
349 
350  hr = ITfTextInputProcessor_Activate(actsvr->pITfTextInputProcessor, (ITfThreadMgr *)tm, actsvr->tid);
351  if (FAILED(hr))
352  {
353  ITfTextInputProcessor_Release(actsvr->pITfTextInputProcessor);
354  actsvr->pITfTextInputProcessor = NULL;
355  return hr;
356  }
357 
358  actsvr->pITfThreadMgrEx = tm;
359  ITfThreadMgrEx_AddRef(tm);
360  return hr;
361 }
362 
364 {
365  HRESULT hr = S_OK;
366 
367  if (actsvr->pITfTextInputProcessor)
368  {
369  hr = ITfTextInputProcessor_Deactivate(actsvr->pITfTextInputProcessor);
370  ITfTextInputProcessor_Release(actsvr->pITfTextInputProcessor);
371  ITfThreadMgrEx_Release(actsvr->pITfThreadMgrEx);
372  actsvr->pITfTextInputProcessor = NULL;
373  actsvr->pITfThreadMgrEx = NULL;
374  }
375 
376  return hr;
377 }
378 
380 {
381  AtsEntry *ats, *cursor2;
382 
384  {
386  {
387  deactivate_given_ts(ats->ats);
388  list_remove(&ats->entry);
389  HeapFree(GetProcessHeap(),0,ats->ats);
390  HeapFree(GetProcessHeap(),0,ats);
391  /* we are guaranteeing there is only 1 */
392  break;
393  }
394  }
395 }
396 
398 {
399  ActivatedTextService *actsvr;
400  ITfCategoryMgr *catmgr;
401  AtsEntry *entry;
403  ITfClientId *clientid;
404 
405  if (!tm) return E_UNEXPECTED;
406 
407  actsvr = HeapAlloc(GetProcessHeap(),0,sizeof(ActivatedTextService));
408  if (!actsvr) return E_OUTOFMEMORY;
409 
410  ITfThreadMgrEx_QueryInterface(tm, &IID_ITfClientId, (void **)&clientid);
411  ITfClientId_GetClientId(clientid, &lp->clsid, &actsvr->tid);
412  ITfClientId_Release(clientid);
413 
414  if (!actsvr->tid)
415  {
416  HeapFree(GetProcessHeap(),0,actsvr);
417  return E_OUTOFMEMORY;
418  }
419 
420  actsvr->pITfTextInputProcessor = NULL;
421  actsvr->LanguageProfile = *lp;
422  actsvr->pITfKeyEventSink = NULL;
423 
424  /* get TIP category */
426  {
428 
429  ITfCategoryMgr_FindClosestCategory(catmgr,
430  &actsvr->LanguageProfile.clsid, &actsvr->LanguageProfile.catid,
431  list, 3);
432 
433  ITfCategoryMgr_Release(catmgr);
434  }
435  else
436  {
437  ERR("CategoryMgr construction failed\n");
438  actsvr->LanguageProfile.catid = GUID_NULL;
439  }
440 
441  if (!IsEqualGUID(&actsvr->LanguageProfile.catid,&GUID_NULL))
443 
444  if (activated > 0)
445  activate_given_ts(actsvr, tm);
446 
447  entry = HeapAlloc(GetProcessHeap(),0,sizeof(AtsEntry));
448 
449  if (!entry)
450  {
451  HeapFree(GetProcessHeap(),0,actsvr);
452  return E_OUTOFMEMORY;
453  }
454 
455  entry->ats = actsvr;
456  list_add_head(&AtsList, &entry->entry);
457 
458  return S_OK;
459 }
460 
462 {
463  AtsEntry *ats;
464 
466  {
467  if (IsEqualCLSID(rclsid,&ats->ats->LanguageProfile.clsid))
468  {
469  if (profile)
470  *profile = ats->ats->LanguageProfile;
471  return TRUE;
472  }
473  }
474  return FALSE;
475 }
476 
478 {
479  HRESULT hr = S_OK;
480  AtsEntry *ats;
481 
482  activated ++;
483  if (activated > 1)
484  return S_OK;
485 
487  {
488  hr = activate_given_ts(ats->ats, tm);
489  if (FAILED(hr))
490  FIXME("Failed to activate text service\n");
491  }
492  return hr;
493 }
494 
496 {
497  AtsEntry *ats;
498 
499  if (activated > 0)
500  activated --;
501 
502  if (activated == 0)
504  deactivate_given_ts(ats->ats);
505 
506  return S_OK;
507 }
508 
510 {
511  AtsEntry *ats;
512 
514  if (ats->ats->tid == tid)
515  return ats->ats->LanguageProfile.clsid;
516  return GUID_NULL;
517 }
518 
520 {
521  AtsEntry *ats;
522 
523  if (!IsEqualCLSID(iid,&IID_ITfKeyEventSink))
524  return E_NOINTERFACE;
525 
527  if (ats->ats->tid == tid)
528  {
529  *sink = (IUnknown*)ats->ats->pITfKeyEventSink;
530  return S_OK;
531  }
532 
533  return E_FAIL;
534 }
535 
537 {
538  AtsEntry *ats;
539 
540  if (!IsEqualCLSID(iid,&IID_ITfKeyEventSink))
541  return E_NOINTERFACE;
542 
544  if (ats->ats->tid == tid)
545  {
547  return S_OK;
548  }
549 
550  return E_FAIL;
551 }
552 
553 /*************************************************************************
554  * MSCTF DllMain
555  */
557 {
558  TRACE("%p 0x%x %p\n", hinst, fdwReason, fImpLoad);
559  switch (fdwReason)
560  {
561  case DLL_WINE_PREATTACH:
562  return FALSE; /* prefer native version */
563  case DLL_PROCESS_ATTACH:
565  tlsIndex = TlsAlloc();
566  break;
567  case DLL_PROCESS_DETACH:
568  if (fImpLoad) break;
569  TlsFree(tlsIndex);
570  break;
571  }
572  return TRUE;
573 }
574 
575 /*************************************************************************
576  * DllCanUnloadNow (MSCTF.@)
577  */
579 {
580  return S_FALSE;
581 }
582 
583 /***********************************************************************
584  * DllGetClassObject (MSCTF.@)
585  */
587 {
588  int i;
589 
590  *ppvOut = NULL;
591  if (!IsEqualIID(iid, &IID_IUnknown) && !IsEqualIID(iid, &IID_IClassFactory))
592  return E_NOINTERFACE;
593 
594  for (i = 0; ClassesTable[i].clsid != NULL; i++)
596  return ClassFactory_Constructor(ClassesTable[i].ctor, ppvOut);
597  }
598  FIXME("CLSID %s not supported\n", debugstr_guid(clsid));
600 }
601 
602 /***********************************************************************
603  * DllRegisterServer (MSCTF.@)
604  */
606 {
608 }
609 
610 /***********************************************************************
611  * DllUnregisterServer (MSCTF.@)
612  */
614 {
616 }
617 
618 /***********************************************************************
619  * TF_CreateThreadMgr (MSCTF.@)
620  */
622 {
623  TRACE("\n");
624  return ThreadMgr_Constructor(NULL,(IUnknown**)pptim);
625 }
626 
627 /***********************************************************************
628  * TF_GetThreadMgr (MSCTF.@)
629  */
631 {
632  TRACE("\n");
633  *pptim = TlsGetValue(tlsIndex);
634 
635  if (*pptim)
636  ITfThreadMgr_AddRef(*pptim);
637 
638  return S_OK;
639 }
640 
641 /***********************************************************************
642  * SetInputScope(MSCTF.@)
643  */
645 {
646  FIXME("STUB: %p %i\n",hwnd,inputscope);
647  return S_OK;
648 }
649 
650 /***********************************************************************
651  * SetInputScopes(MSCTF.@)
652  */
654  UINT cInputScopes, WCHAR **ppszPhraseList,
655  UINT cPhrases, WCHAR *pszRegExp, WCHAR *pszSRGS)
656 {
657  UINT i;
658  FIXME("STUB: %p ... %s %s\n",hwnd, debugstr_w(pszRegExp), debugstr_w(pszSRGS));
659  for (i = 0; i < cInputScopes; i++)
660  TRACE("\tScope[%u] = %i\n",i,pInputScopes[i]);
661  for (i = 0; i < cPhrases; i++)
662  TRACE("\tPhrase[%u] = %s\n",i,debugstr_w(ppszPhraseList[i]));
663 
664  return S_OK;
665 }
666 
667 /***********************************************************************
668  * TF_CreateInputProcessorProfiles(MSCTF.@)
669  */
671  ITfInputProcessorProfiles **ppipr)
672 {
674 }
675 
676 /***********************************************************************
677  * TF_InvalidAssemblyListCacheIfExist(MSCTF.@)
678  */
680 {
681  FIXME("Stub\n");
682  return S_OK;
683 }
684 
685 /***********************************************************************
686  * TF_CreateLangBarMgr (MSCTF.@)
687  */
689 {
690  TRACE("\n");
691  return LangBarMgr_Constructor(NULL,(IUnknown**)pppbm);
692 }
693 
695 {
696  FIXME("stub %p\n", pplbim);
697  *pplbim = NULL;
698 
699  return E_NOTIMPL;
700 }
701 
702 /***********************************************************************
703  * TF_InitMlngInfo (MSCTF.@)
704  */
706 {
707  FIXME("stub\n");
708  return S_OK;
709 }
static UINT activated
Definition: msctf.c:72
static HINSTANCE MSCTF_hinstance
Definition: msctf.c:44
HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr)
Definition: msctf.c:670
const WCHAR szwSystemTIPKey[]
Definition: msctf.c:78
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define HRESULT
Definition: msvc.h:9
HRESULT WINAPI TF_CreateLangBarItemMgr(ITfLangBarItemMgr **pplbim)
Definition: msctf.c:694
HRESULT add_active_textservice(TF_LANGUAGEPROFILE *lp)
Definition: msctf.c:397
LPVOID get_Cookie_data(DWORD id)
Definition: msctf.c:248
HRESULT DisplayAttributeMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
#define REFIID
Definition: guiddef.h:113
#define TRUE
Definition: types.h:120
DWORD enumerate_Cookie(DWORD magic, DWORD *index)
Definition: msctf.c:275
#define E_NOINTERFACE
Definition: winerror.h:2364
const WCHAR szwSystemCTFKey[]
Definition: msctf.c:79
HRESULT LangBarMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
Definition: langbarmgr.c:182
static void ClassFactory_Destructor(ClassFactory *This)
Definition: msctf.c:107
HRESULT hr
Definition: shlfolder.c:183
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:98
static void deactivate_remove_conflicting_ts(REFCLSID catid)
Definition: msctf.c:379
HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim)
Definition: msctf.c:630
LPVOID data
Definition: msctf.c:50
HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(void)
Definition: msctf.c:679
#define CONNECT_E_CANNOTCONNECT
Definition: olectl.h:253
TfClientId processId
Definition: msctf.c:75
REFIID riid
Definition: precomp.h:44
EXTERN_C const GUID GUID_TFCAT_TIP_SPEECH
Definition: msctf.idl:63
HRESULT activate_textservices(ITfThreadMgrEx *tm)
Definition: msctf.c:477
#define REFCLSID
Definition: guiddef.h:112
LPFNCONSTRUCTOR ctor
Definition: msctf.c:99
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
Definition: msctf.c:556
void free_sinks(struct list *sink_list)
Definition: msctf.c:326
static ClassFactory * impl_from_IClassFactory(IClassFactory *iface)
Definition: msctf.c:102
uint8_t entry
Definition: isohybrid.c:63
#define WARN(fmt,...)
Definition: debug.h:111
#define CONNECT_E_NOCONNECTION
Definition: olectl.h:251
__WINE_SERVER_LIST_INLINE void list_add_head(struct list *list, struct list *elem)
Definition: list.h:96
static UINT id_last
Definition: msctf.c:68
HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie)
Definition: msctf.c:287
static const struct @461 ClassesTable[]
static HRESULT deactivate_given_ts(ActivatedTextService *actsvr)
Definition: msctf.c:363
u32_t magic(void)
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
DWORD get_Cookie_magic(DWORD id)
Definition: msctf.c:235
LPFNCONSTRUCTOR ctor
Definition: msctf.c:85
#define E_FAIL
Definition: ddrawi.h:102
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
HRESULT deactivate_textservices(void)
Definition: msctf.c:495
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
static UINT array_size
Definition: msctf.c:69
static HRESULT ClassFactory_Constructor(LPFNCONSTRUCTOR ctor, LPVOID *ppvOut)
Definition: msctf.c:177
DWORD tlsIndex
Definition: msctf.c:74
GLsizei GLsizei GLuint * obj
Definition: glext.h:6042
HRESULT WINAPI SetInputScope(HWND hwnd, InputScope inputscope)
Definition: msctf.c:644
HRESULT WINAPI DllCanUnloadNow(void)
Definition: msctf.c:578
CLSID get_textservice_clsid(TfClientId tid)
Definition: msctf.c:509
DWORD magic
Definition: msctf.c:49
EXTERN_C const CLSID CLSID_TF_CategoryMgr
Definition: msctf.idl:47
ITfCompartmentMgr * globalCompartmentMgr
Definition: msctf.c:76
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
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
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
LPVOID remove_Cookie(DWORD id)
Definition: msctf.c:261
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
HRESULT get_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown **sink)
Definition: msctf.c:519
ITfThreadMgrEx * pITfThreadMgrEx
Definition: msctf.c:56
#define debugstr_w
Definition: kernel32.h:32
static HRESULT activate_given_ts(ActivatedTextService *actsvr, ITfThreadMgrEx *tm)
Definition: msctf.c:338
#define FIXME(fmt,...)
Definition: debug.h:110
EXTERN_C const GUID GUID_TFCAT_TIP_HANDWRITING
Definition: msctf.idl:64
HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, LPVOID *ppvOut)
Definition: msctf.c:586
#define S_FALSE
Definition: winerror.h:2357
smooth NULL
Definition: ftsmooth.c:416
static struct list AtsList
Definition: msctf.c:71
struct list entry
Definition: msctf.c:63
GUID catid
Definition: msctf.idl:608
HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm)
Definition: msctf.c:688
GLuint index
Definition: glext.h:6031
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: msctf.c:126
#define debugstr_guid
Definition: kernel32.h:35
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
Definition: msctf.c:157
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles
Definition: msctf.idl:45
#define DLL_PROCESS_DETACH
Definition: compat.h:119
HRESULT WINAPI SetInputScopes(HWND hwnd, const InputScope *pInputScopes, UINT cInputScopes, WCHAR **ppszPhraseList, UINT cPhrases, WCHAR *pszRegExp, WCHAR *pszSRGS)
Definition: msctf.c:653
LONG ref
Definition: msctf.c:98
ActivatedTextService * ats
Definition: msctf.c:64
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
HRESULT CategoryMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
Definition: categorymgr.c:415
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1089
#define LIST_INIT(head)
Definition: queue.h:197
__wchar_t WCHAR
Definition: xmlstorage.h:180
TfClientId tid
Definition: msctf.c:58
LONG HRESULT
Definition: typedefs.h:77
IClassFactory IClassFactory_iface
Definition: msctf.c:97
const GUID IID_IUnknown
#define WINAPI
Definition: msvc.h:8
EXTERN_C const CLSID CLSID_TF_ThreadMgr
Definition: msctf.idl:44
struct list * next
Definition: list.h:38
ITfKeyEventSink * pITfKeyEventSink
Definition: msctf.c:57
static void free_sink(Sink *sink)
Definition: msctf.c:307
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim)
Definition: msctf.c:621
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppvOut)
Definition: msctf.c:113
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: msctf.c:132
EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr
Definition: msctf.idl:48
int ret
REFCLSID clsid
Definition: msctf.c:84
static CookieInternal * cookies
Definition: msctf.c:67
#define index(s, c)
Definition: various.h:29
#define InterlockedDecrement
Definition: armddk.h:52
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:110
#define GUID_NULL
Definition: ks.h:106
HRESULT WINAPI DllRegisterServer(void)
Definition: msctf.c:605
Definition: _list.h:228
DWORD WINAPI TlsAlloc(VOID)
Definition: thread.c:1023
Definition: time.h:76
HRESULT WINAPI DllUnregisterServer(void)
Definition: msctf.c:613
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3234
#define ERR(fmt,...)
Definition: debug.h:109
Definition: msctf.c:61
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
Definition: list.h:143
#define S_OK
Definition: intsafe.h:59
HRESULT set_textservice_sink(TfClientId tid, REFCLSID iid, IUnknown *sink)
Definition: msctf.c:536
ITfTextInputProcessor * pITfTextInputProcessor
Definition: msctf.c:55
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define InterlockedIncrement
Definition: armddk.h:53
DWORD LPVOID fImpLoad
Definition: misc.cpp:155
HRESULT InputProcessorProfiles_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
WINE_DEFAULT_DEBUG_CHANNEL(msctf)
#define HeapReAlloc
Definition: compat.h:393
#define E_NOTIMPL
Definition: ddrawi.h:99
BOOL get_active_textservice(REFCLSID rclsid, TF_LANGUAGEPROFILE *profile)
Definition: msctf.c:461
EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD
Definition: msctf.idl:62
HRESULT ThreadMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut) DECLSPEC_HIDDEN
Definition: threadmgr.c:1319
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
HRESULT WINAPI TF_InitMlngInfo(void)
Definition: msctf.c:705
#define E_UNEXPECTED
Definition: winerror.h:2456
HRESULT(* LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut)
Definition: msctf.c:81
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1163
HRESULT unadvise_sink(DWORD cookie)
Definition: msctf.c:314
struct tagClassFactory ClassFactory
static const IClassFactoryVtbl ClassFactoryVtbl
Definition: msctf.c:166
unsigned int ULONG
Definition: retypes.h:1
static HINSTANCE hinst
Definition: edit.c:551
#define profile
Definition: kernel32.h:12
DWORD TfClientId
Definition: msctf.idl:68
EXTERN_C const CLSID CLSID_TF_LangBarMgr
Definition: msctf.idl:46
#define LIST_ENTRY(type)
Definition: queue.h:175
const GUID IID_IClassFactory
TF_LANGUAGEPROFILE LanguageProfile
Definition: msctf.c:54
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:91
static TfClientId tid
#define HeapFree(x, y, z)
Definition: compat.h:394
static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *punkOuter, REFIID iid, LPVOID *ppvOut)
Definition: msctf.c:142
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:90
#define SUCCEEDED(hr)
Definition: intsafe.h:57
DWORD generate_Cookie(DWORD magic, LPVOID data)
Definition: msctf.c:191
InputScope
Definition: inputscope.idl:10
DWORD id
Definition: msctf.c:48