mirror of
https://github.com/reactos/reactos.git
synced 2025-07-23 09:33:40 +00:00
[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:
parent
a5ab400689
commit
519232df78
4 changed files with 23 additions and 29 deletions
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue