[MSCTF] Support TF_CreateCategoryMgr etc. (#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.
This commit is contained in:
Katayama Hirofumi MZ 2025-07-17 21:17:28 +09:00 committed by GitHub
parent a5ab400689
commit 519232df78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 23 additions and 29 deletions

View file

@ -41,7 +41,6 @@ static UINT array_size;
static struct list AtsList = LIST_INIT(AtsList);
static UINT activated = 0;
DWORD g_tlsIndex = 0;
TfClientId g_processId = 0;
ITfCompartmentMgr *g_globalCompartmentMgr = NULL;
@ -372,7 +371,7 @@ HRESULT add_active_textservice(TF_LANGUAGEPROFILE *lp)
ActivatedTextService *actsvr;
ITfCategoryMgr *catmgr;
AtsEntry *entry;
ITfThreadMgrEx *tm = (ITfThreadMgrEx *)TlsGetValue(g_tlsIndex);
ITfThreadMgrEx *tm = (ITfThreadMgrEx *)TlsGetValue(g_dwTLSIndex);
ITfClientId *clientid;
if (!tm)
@ -544,11 +543,10 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
{
case DLL_PROCESS_ATTACH:
MSCTF_hinstance = hinst;
g_tlsIndex = TlsAlloc();
break;
return ProcessAttach(hinst);
case DLL_PROCESS_DETACH:
if (fImpLoad) break;
TlsFree(g_tlsIndex);
ProcessDetach(hinst);
break;
}
return TRUE;
@ -613,7 +611,7 @@ HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim)
HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim)
{
TRACE("\n");
*pptim = (ITfThreadMgr *)TlsGetValue(g_tlsIndex);
*pptim = (ITfThreadMgr *)TlsGetValue(g_dwTLSIndex);
if (*pptim)
(*pptim)->AddRef();

View file

@ -43,7 +43,7 @@ extern "C" {
#define COOKIE_MAGIC_INPUTPROCESSORPROFILEACTIVATIONSINK 0x00b0
#define COOKIE_MAGIC_ACTIVELANGSINK 0x00c0
extern DWORD g_tlsIndex;
extern DWORD g_dwTLSIndex;
extern TfClientId g_processId;
extern ITfCompartmentMgr *g_globalCompartmentMgr;
@ -108,6 +108,9 @@ void free_sinks(struct list *sink_list);
HRESULT __wine_register_resources(HMODULE module);
HRESULT __wine_unregister_resources(HMODULE module);
BOOL ProcessAttach(HINSTANCE hinstDLL);
VOID ProcessDetach(HINSTANCE hinstDLL);
#ifdef __cplusplus
} // extern "C"
#endif

View file

@ -308,7 +308,7 @@ CThreadMgr::~CThreadMgr()
if (m_focusHook)
UnhookWindowsHookEx(m_focusHook);
TlsSetValue(g_tlsIndex, NULL);
TlsSetValue(g_dwTLSIndex, NULL);
TRACE("destroying %p\n", this);
if (m_focus)
@ -527,7 +527,7 @@ LRESULT CThreadMgr::_ThreadFocusHookProc(INT nCode, WPARAM wParam, LPARAM lParam
LRESULT CALLBACK CThreadMgr::ThreadFocusHookProc(INT nCode, WPARAM wParam, LPARAM lParam)
{
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_tlsIndex);
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_dwTLSIndex);
if (!This)
{
ERR("Hook proc but no ThreadMgr for this thread. Serious Error\n");
@ -1215,7 +1215,7 @@ HRESULT CThreadMgr::CreateInstance(IUnknown *pUnkOuter, CThreadMgr **ppOut)
return CLASS_E_NOAGGREGATION;
/* Only 1 ThreadMgr is created per thread */
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_tlsIndex);
CThreadMgr *This = (CThreadMgr *)TlsGetValue(g_dwTLSIndex);
if (This)
{
This->AddRef();
@ -1227,7 +1227,7 @@ HRESULT CThreadMgr::CreateInstance(IUnknown *pUnkOuter, CThreadMgr **ppOut)
if (!This)
return E_OUTOFMEMORY;
TlsSetValue(g_tlsIndex, This);
TlsSetValue(g_dwTLSIndex, This);
ITfCompartmentMgr *pCompMgr = NULL;
CompartmentMgr_Constructor(static_cast<ITfThreadMgrEx *>(This), IID_IUnknown, (IUnknown **)&pCompMgr);

View file

@ -250,15 +250,13 @@ TF_GetThreadFlags(
/***********************************************************************
* TF_CreateCategoryMgr (MSCTF.@)
*
* @unimplemented
* @implemented
*/
EXTERN_C HRESULT WINAPI
TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat)
{
FIXME("(%p)\n", ppcat);
if (ppcat)
*ppcat = NULL;
return E_NOTIMPL;
TRACE("(%p)\n", ppcat);
return CategoryMgr_Constructor(NULL, (IUnknown **)ppcat);
}
/***********************************************************************
@ -279,14 +277,13 @@ TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon)
/***********************************************************************
* TF_CreateDisplayAttributeMgr (MSCTF.@)
*
* @unimplemented
* @implemented
*/
EXTERN_C HRESULT WINAPI
TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam)
{
FIXME("(%p)\n", ppdam);
*ppdam = NULL;
return E_NOTIMPL;
TRACE("(%p)\n", ppdam);
return DisplayAttributeMgr_Constructor(NULL, (IUnknown **)ppdam);
}
/***********************************************************************
@ -765,10 +762,8 @@ EXTERN_C VOID TFUninitLib(VOID)
// Do nothing
}
/**
* @unimplemented
*/
BOOL ProcessAttach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
/// @unimplemented
BOOL ProcessAttach(HINSTANCE hinstDLL)
{
gf_CRT_INIT = TRUE;
@ -841,10 +836,8 @@ BOOL ProcessAttach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
return TRUE;
}
/**
* @unimplemented
*/
VOID ProcessDetach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
/// @unimplemented
VOID ProcessDetach(HINSTANCE hinstDLL)
{
if (!gf_CRT_INIT)
{