Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

168 lines
4.0 KiB

//
// api.c
//
#include "private.h"
#include "tim.h"
#include "dim.h"
#include "dam.h"
#include "imelist.h"
#include "nuimgr.h"
#include "globals.h"
#include "assembly.h"
#include "timlist.h"
#include "catmgr.h"
extern "C" HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim)
{
SYSTHREAD *psfn = GetSYSTHREAD();
if (!psfn)
return E_FAIL;
if (pptim)
{
*pptim = psfn->ptim;
if (*pptim)
(*pptim)->AddRef();
}
return S_OK;
}
extern "C" HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim)
{
return CThreadInputMgr::CreateInstance(NULL, IID_ITfThreadMgr, (void **)pptim);
}
extern "C" HRESULT WINAPI TF_CreateDisplayAttributeMgr(ITfDisplayAttributeMgr **ppdam)
{
return CDisplayAttributeMgr::CreateInstance(NULL, IID_ITfDisplayAttributeMgr, (void **)ppdam);
}
extern "C" HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pplbm)
{
return CLangBarMgr::CreateInstance(NULL, IID_ITfLangBarMgr, (void **)pplbm);
}
extern "C" HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipp)
{
return CInputProcessorProfiles::CreateInstance(NULL, IID_ITfInputProcessorProfiles, (void **)ppipp);
}
extern "C" HRESULT WINAPI TF_CreateLangBarItemMgr(ITfLangBarItemMgr **pplbim)
{
return CLangBarItemMgr::CreateInstance(NULL, IID_ITfLangBarItemMgr, (void **)pplbim);
}
extern "C" HRESULT WINAPI TF_InvalidAssemblyListCache()
{
if (!CAssemblyList::InvalidCache())
return E_FAIL;
SYSTHREAD *psfn = GetSYSTHREAD();
if (!psfn)
return E_FAIL;
EnsureAssemblyList(psfn, TRUE);
return S_OK;
}
extern "C" HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist()
{
// the only diff from TF_InvalidAssemblyListCache() is
// that we don't care if cache really exist
//
CAssemblyList::InvalidCache();
SYSTHREAD *psfn = GetSYSTHREAD();
if (!psfn)
return E_FAIL;
EnsureAssemblyList(psfn, TRUE);
return S_OK;
}
extern "C" HRESULT WINAPI TF_PostAllThreadMsg(WPARAM wParam, DWORD dwFlags)
{
ULONG ulNum;
SYSTHREAD *psfn = GetSYSTHREAD();
if (!psfn)
return E_FAIL;
EnsureTIMList(psfn);
ulNum = g_timlist.GetNum();
if (ulNum)
{
DWORD *pdw = new DWORD[ulNum + 1];
if (pdw)
{
if (g_timlist.GetList(pdw,
ulNum+1,
&ulNum,
dwFlags,
TLFlagFromTFPriv(wParam),
TRUE))
{
ULONG ul;
for (ul = 0; ul < ulNum; ul++)
{
if (pdw[ul])
PostThreadMessage(pdw[ul], g_msgPrivate, wParam, 0);
}
}
delete pdw;
}
}
return S_OK;
}
extern "C" HRESULT WINAPI TF_CreateCategoryMgr(ITfCategoryMgr **ppCategoryMgr)
{
return CCategoryMgr::CreateInstance(NULL, IID_ITfCategoryMgr, (void **)ppCategoryMgr);
}
extern "C" BOOL WINAPI TF_IsFullScreenWindowAcitvated()
{
return GetSharedMemory()->fInFullScreen ? TRUE : FALSE;
}
extern "C" HRESULT WINAPI TF_GetGlobalCompartment(ITfCompartmentMgr **ppCompMgr)
{
if (!ppCompMgr)
return E_INVALIDARG;
*ppCompMgr = NULL;
SYSTHREAD *psfn = GetSYSTHREAD();
EnsureGlobalCompartment(psfn);
if (!psfn->_pGlobalCompMgr)
return E_OUTOFMEMORY;
if (EnsureTIMList(psfn))
g_timlist.SetFlags(psfn->dwThreadId, TLF_GCOMPACTIVE);
*ppCompMgr = psfn->_pGlobalCompMgr;
psfn->_pGlobalCompMgr->AddRef();
return S_OK;
}
extern "C" HRESULT WINAPI TF_CUASAppFix(LPCSTR lpCmdLine)
{
if (!lpCmdLine)
return E_INVALIDARG;
if (!lstrcmpi(lpCmdLine, "DelayFirstActivateKeyboardLayout"))
{
g_dwAppCompatibility |= CIC_COMPAT_DELAYFIRSTACTIVATEKBDLAYOUT;
return S_OK;
}
return E_INVALIDARG;
}