Skip to content

Commit 519232d

Browse files
authored
[MSCTF] Support TF_CreateCategoryMgr etc. (reactos#8260)
Implementing missing features... JIRA issue: CORE-19361 - Implement TF_CreateCategoryMgr and TF_CreateDisplayAttributeMgr. - Rename g_tlsIndex as g_dwTLSIndex. - Use ProcessAttach and ProcessDetach in DllMain.
1 parent a5ab400 commit 519232d

File tree

4 files changed

+23
-29
lines changed

4 files changed

+23
-29
lines changed

base/ctf/msctf/msctf.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ static UINT array_size;
4141
static struct list AtsList = LIST_INIT(AtsList);
4242
static UINT activated = 0;
4343

44-
DWORD g_tlsIndex = 0;
4544
TfClientId g_processId = 0;
4645
ITfCompartmentMgr *g_globalCompartmentMgr = NULL;
4746

@@ -372,7 +371,7 @@ HRESULT add_active_textservice(TF_LANGUAGEPROFILE *lp)
372371
ActivatedTextService *actsvr;
373372
ITfCategoryMgr *catmgr;
374373
AtsEntry *entry;
375-
ITfThreadMgrEx *tm = (ITfThreadMgrEx *)TlsGetValue(g_tlsIndex);
374+
ITfThreadMgrEx *tm = (ITfThreadMgrEx *)TlsGetValue(g_dwTLSIndex);
376375
ITfClientId *clientid;
377376

378377
if (!tm)
@@ -544,11 +543,10 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
544543
{
545544
case DLL_PROCESS_ATTACH:
546545
MSCTF_hinstance = hinst;
547-
g_tlsIndex = TlsAlloc();
548-
break;
546+
return ProcessAttach(hinst);
547+
549548
case DLL_PROCESS_DETACH:
550-
if (fImpLoad) break;
551-
TlsFree(g_tlsIndex);
549+
ProcessDetach(hinst);
552550
break;
553551
}
554552
return TRUE;
@@ -613,7 +611,7 @@ HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim)
613611
HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim)
614612
{
615613
TRACE("\n");
616-
*pptim = (ITfThreadMgr *)TlsGetValue(g_tlsIndex);
614+
*pptim = (ITfThreadMgr *)TlsGetValue(g_dwTLSIndex);
617615

618616
if (*pptim)
619617
(*pptim)->AddRef();

base/ctf/msctf/precomp.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ extern "C" {
4343
#define COOKIE_MAGIC_INPUTPROCESSORPROFILEACTIVATIONSINK 0x00b0
4444
#define COOKIE_MAGIC_ACTIVELANGSINK 0x00c0
4545

46-
extern DWORD g_tlsIndex;
46+
extern DWORD g_dwTLSIndex;
4747
extern TfClientId g_processId;
4848
extern ITfCompartmentMgr *g_globalCompartmentMgr;
4949

@@ -108,6 +108,9 @@ void free_sinks(struct list *sink_list);
108108
HRESULT __wine_register_resources(HMODULE module);
109109
HRESULT __wine_unregister_resources(HMODULE module);
110110

111+
BOOL ProcessAttach(HINSTANCE hinstDLL);
112+
VOID ProcessDetach(HINSTANCE hinstDLL);
113+
111114
#ifdef __cplusplus
112115
} // extern "C"
113116
#endif

base/ctf/msctf/threadmgr.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ CThreadMgr::~CThreadMgr()
308308
if (m_focusHook)
309309
UnhookWindowsHookEx(m_focusHook);
310310

311-
TlsSetValue(g_tlsIndex, NULL);
311+
TlsSetValue(g_dwTLSIndex, NULL);
312312
TRACE("destroying %p\n", this);
313313

314314
if (m_focus)
@@ -527,7 +527,7 @@ LRESULT CThreadMgr::_ThreadFocusHookProc(INT nCode, WPARAM wParam, LPARAM lParam
527527

528528
LRESULT CALLBACK CThreadMgr::ThreadFocusHookProc(INT nCode, WPARAM wParam, LPARAM lParam)
529529
{
530-
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_tlsIndex);
530+
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_dwTLSIndex);
531531
if (!This)
532532
{
533533
ERR("Hook proc but no ThreadMgr for this thread. Serious Error\n");
@@ -1215,7 +1215,7 @@ HRESULT CThreadMgr::CreateInstance(IUnknown *pUnkOuter, CThreadMgr **ppOut)
12151215
return CLASS_E_NOAGGREGATION;
12161216

12171217
/* Only 1 ThreadMgr is created per thread */
1218-
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_tlsIndex);
1218+
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_dwTLSIndex);
12191219
if (This)
12201220
{
12211221
This->AddRef();
@@ -1227,7 +1227,7 @@ HRESULT CThreadMgr::CreateInstance(IUnknown *pUnkOuter, CThreadMgr **ppOut)
12271227
if (!This)
12281228
return E_OUTOFMEMORY;
12291229

1230-
TlsSetValue(g_tlsIndex, This);
1230+
TlsSetValue(g_dwTLSIndex, This);
12311231

12321232
ITfCompartmentMgr *pCompMgr = NULL;
12331233
CompartmentMgr_Constructor(static_cast<ITfThreadMgrEx *>(This), IID_IUnknown, (IUnknown **)&pCompMgr);

base/ctf/msctf/utils.cpp

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -250,15 +250,13 @@ TF_GetThreadFlags(
250250
/***********************************************************************
251251
* TF_CreateCategoryMgr (MSCTF.@)
252252
*
253-
* @unimplemented
253+
* @implemented
254254
*/
255255
EXTERN_C HRESULT WINAPI
256256
TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat)
257257
{
258-
FIXME("(%p)\n", ppcat);
259-
if (ppcat)
260-
*ppcat = NULL;
261-
return E_NOTIMPL;
258+
TRACE("(%p)\n", ppcat);
259+
return CategoryMgr_Constructor(NULL, (IUnknown **)ppcat);
262260
}
263261

264262
/***********************************************************************
@@ -279,14 +277,13 @@ TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon)
279277
/***********************************************************************
280278
* TF_CreateDisplayAttributeMgr (MSCTF.@)
281279
*
282-
* @unimplemented
280+
* @implemented
283281
*/
284282
EXTERN_C HRESULT WINAPI
285283
TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam)
286284
{
287-
FIXME("(%p)\n", ppdam);
288-
*ppdam = NULL;
289-
return E_NOTIMPL;
285+
TRACE("(%p)\n", ppdam);
286+
return DisplayAttributeMgr_Constructor(NULL, (IUnknown **)ppdam);
290287
}
291288

292289
/***********************************************************************
@@ -765,10 +762,8 @@ EXTERN_C VOID TFUninitLib(VOID)
765762
// Do nothing
766763
}
767764

768-
/**
769-
* @unimplemented
770-
*/
771-
BOOL ProcessAttach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
765+
/// @unimplemented
766+
BOOL ProcessAttach(HINSTANCE hinstDLL)
772767
{
773768
gf_CRT_INIT = TRUE;
774769

@@ -841,10 +836,8 @@ BOOL ProcessAttach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
841836
return TRUE;
842837
}
843838

844-
/**
845-
* @unimplemented
846-
*/
847-
VOID ProcessDetach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
839+
/// @unimplemented
840+
VOID ProcessDetach(HINSTANCE hinstDLL)
848841
{
849842
if (!gf_CRT_INIT)
850843
{

0 commit comments

Comments
 (0)