mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 11:51:58 +00:00
[IMM32] Rewrite ImmRegisterWordA (#3881)
- Rewrite ImmRegisterWordA function. - Modify imetable.h. CORE-11700
This commit is contained in:
parent
6b24e73d41
commit
1e62771c78
2 changed files with 74 additions and 25 deletions
|
@ -437,6 +437,27 @@ BOOL WINAPI ImmLoadIME(HKL hKL)
|
|||
return (pImeDpi != NULL);
|
||||
}
|
||||
|
||||
PIMEDPI APIENTRY ImmLockOrLoadImeDpi(HKL hKL)
|
||||
{
|
||||
PW32CLIENTINFO pInfo;
|
||||
PIMEDPI pImeDpi;
|
||||
|
||||
if (!IS_IME_HKL(hKL))
|
||||
{
|
||||
if (!g_psi || !(g_psi->dwSRVIFlags & SRVINFO_CICERO_ENABLED))
|
||||
return NULL;
|
||||
|
||||
pInfo = (PW32CLIENTINFO)(NtCurrentTeb()->Win32ClientInfo);
|
||||
if ((pInfo->W32ClientInfo[0] & 2))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pImeDpi = ImmLockImeDpi(hKL);
|
||||
if (pImeDpi == NULL)
|
||||
pImeDpi = Ime32LoadImeDpi(hKL, TRUE);
|
||||
return pImeDpi;
|
||||
}
|
||||
|
||||
HKL WINAPI ImmLoadLayout(HKL hKL, PIMEINFOEX pImeInfoEx)
|
||||
{
|
||||
DWORD cbData;
|
||||
|
@ -3332,28 +3353,56 @@ BOOL WINAPI ImmNotifyIME(
|
|||
BOOL WINAPI ImmRegisterWordA(
|
||||
HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszRegister)
|
||||
{
|
||||
ImmHkl *immHkl = IMM_GetImmHkl(hKL);
|
||||
TRACE("(%p, %s, %d, %s):\n", hKL, debugstr_a(lpszReading), dwStyle,
|
||||
debugstr_a(lpszRegister));
|
||||
if (immHkl->hIME && immHkl->pImeRegisterWord)
|
||||
{
|
||||
if (!is_kbd_ime_unicode(immHkl))
|
||||
return immHkl->pImeRegisterWord((LPCWSTR)lpszReading,dwStyle,
|
||||
(LPCWSTR)lpszRegister);
|
||||
else
|
||||
{
|
||||
LPWSTR lpszwReading = strdupAtoW(lpszReading);
|
||||
LPWSTR lpszwRegister = strdupAtoW(lpszRegister);
|
||||
BOOL rc;
|
||||
BOOL ret = FALSE;
|
||||
PIMEDPI pImeDpi;
|
||||
LPWSTR pszReadingW = NULL, pszRegisterW = NULL;
|
||||
INT cch;
|
||||
|
||||
rc = immHkl->pImeRegisterWord(lpszwReading,dwStyle,lpszwRegister);
|
||||
HeapFree(GetProcessHeap(),0,lpszwReading);
|
||||
HeapFree(GetProcessHeap(),0,lpszwRegister);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
else
|
||||
TRACE("(%p, %s, 0x%lX, %s)\n", hKL, debugstr_a(lpszReading), dwStyle,
|
||||
debugstr_a(lpszRegister));
|
||||
|
||||
pImeDpi = ImmLockOrLoadImeDpi(hKL);
|
||||
if (!pImeDpi)
|
||||
return FALSE;
|
||||
|
||||
if (!(pImeDpi->ImeInfo.fdwProperty & IME_PROP_UNICODE))
|
||||
{
|
||||
ret = pImeDpi->ImeRegisterWord(lpszReading, dwStyle, lpszRegister);
|
||||
ImmUnlockImeDpi(pImeDpi);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (lpszReading)
|
||||
{
|
||||
cch = lstrlenA(lpszReading);
|
||||
pszReadingW = Imm32HeapAlloc(0, (cch + 1) * sizeof(WCHAR));
|
||||
if (pszReadingW == NULL)
|
||||
goto Quit;
|
||||
cch = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszReading, cch,
|
||||
pszReadingW, cch + 1);
|
||||
pszReadingW[cch] = 0;
|
||||
}
|
||||
|
||||
if (lpszRegister)
|
||||
{
|
||||
cch = lstrlenA(lpszRegister);
|
||||
pszRegisterW = Imm32HeapAlloc(0, (cch + 1) * sizeof(WCHAR));
|
||||
if (pszRegisterW == NULL)
|
||||
goto Quit;
|
||||
cch = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszRegister, cch,
|
||||
pszRegisterW, cch + 1);
|
||||
pszRegisterW[cch] = 0;
|
||||
}
|
||||
|
||||
ret = ImmRegisterWordW(hKL, pszReadingW, dwStyle, pszRegisterW);
|
||||
|
||||
Quit:
|
||||
if (pszReadingW)
|
||||
HeapFree(g_hImm32Heap, 0, pszReadingW);
|
||||
if (pszRegisterW)
|
||||
HeapFree(g_hImm32Heap, 0, pszRegisterW);
|
||||
ImmUnlockImeDpi(pImeDpi);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
/* DEFINE_IME_ENTRY(type, name, params, extended) */
|
||||
DEFINE_IME_ENTRY(BOOL, ImeInquire, (LPIMEINFO lpIMEInfo, LPWSTR lpszWndClass, DWORD dwSystemInfoFlags), FALSE)
|
||||
DEFINE_IME_ENTRY(DWORD, ImeConversionList, (HIMC hIMC, LPCWSTR lpSrc, LPCANDIDATELIST lpDst, DWORD dwBufLen, UINT uFlag), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeRegisterWord, (LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszString), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeUnregisterWord, (LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszString), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeInquire, (LPIMEINFO lpIMEInfo, LPVOID lpszWndClass, DWORD dwSystemInfoFlags), FALSE)
|
||||
DEFINE_IME_ENTRY(DWORD, ImeConversionList, (HIMC hIMC, LPCVOID lpSrc, LPCANDIDATELIST lpDst, DWORD dwBufLen, UINT uFlag), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeRegisterWord, (LPCVOID lpszReading, DWORD dwStyle, LPCVOID lpszString), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeUnregisterWord, (LPCVOID lpszReading, DWORD dwStyle, LPCVOID lpszString), FALSE)
|
||||
DEFINE_IME_ENTRY(UINT, ImeGetRegisterWordStyle, (UINT nItem, LPSTYLEBUFW lpStyleBuf), FALSE)
|
||||
DEFINE_IME_ENTRY(UINT, ImeEnumRegisterWord, (HKL hKL, REGISTERWORDENUMPROCW lpfnEnumProc, LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszString, LPVOID lpData), FALSE)
|
||||
DEFINE_IME_ENTRY(UINT, ImeEnumRegisterWord, (HKL hKL, REGISTERWORDENUMPROCW lpfnEnumProc, LPCVOID lpszReading, DWORD dwStyle, LPCVOID lpszString, LPVOID lpData), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeConfigure, (HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeDestroy, (UINT uReserved), FALSE)
|
||||
DEFINE_IME_ENTRY(LRESULT, ImeEscape, (HIMC hIMC, UINT uEscape, LPVOID lpData), FALSE)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue