mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 09:11:42 +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);
|
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)
|
HKL WINAPI ImmLoadLayout(HKL hKL, PIMEINFOEX pImeInfoEx)
|
||||||
{
|
{
|
||||||
DWORD cbData;
|
DWORD cbData;
|
||||||
|
@ -3332,28 +3353,56 @@ BOOL WINAPI ImmNotifyIME(
|
||||||
BOOL WINAPI ImmRegisterWordA(
|
BOOL WINAPI ImmRegisterWordA(
|
||||||
HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszRegister)
|
HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszRegister)
|
||||||
{
|
{
|
||||||
ImmHkl *immHkl = IMM_GetImmHkl(hKL);
|
BOOL ret = FALSE;
|
||||||
TRACE("(%p, %s, %d, %s):\n", hKL, debugstr_a(lpszReading), dwStyle,
|
PIMEDPI pImeDpi;
|
||||||
debugstr_a(lpszRegister));
|
LPWSTR pszReadingW = NULL, pszRegisterW = NULL;
|
||||||
if (immHkl->hIME && immHkl->pImeRegisterWord)
|
INT cch;
|
||||||
{
|
|
||||||
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;
|
|
||||||
|
|
||||||
rc = immHkl->pImeRegisterWord(lpszwReading,dwStyle,lpszwRegister);
|
TRACE("(%p, %s, 0x%lX, %s)\n", hKL, debugstr_a(lpszReading), dwStyle,
|
||||||
HeapFree(GetProcessHeap(),0,lpszwReading);
|
debugstr_a(lpszRegister));
|
||||||
HeapFree(GetProcessHeap(),0,lpszwRegister);
|
|
||||||
return rc;
|
pImeDpi = ImmLockOrLoadImeDpi(hKL);
|
||||||
}
|
if (!pImeDpi)
|
||||||
}
|
|
||||||
else
|
|
||||||
return FALSE;
|
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(type, name, params, extended) */
|
||||||
DEFINE_IME_ENTRY(BOOL, ImeInquire, (LPIMEINFO lpIMEInfo, LPWSTR lpszWndClass, DWORD dwSystemInfoFlags), FALSE)
|
DEFINE_IME_ENTRY(BOOL, ImeInquire, (LPIMEINFO lpIMEInfo, LPVOID lpszWndClass, DWORD dwSystemInfoFlags), FALSE)
|
||||||
DEFINE_IME_ENTRY(DWORD, ImeConversionList, (HIMC hIMC, LPCWSTR lpSrc, LPCANDIDATELIST lpDst, DWORD dwBufLen, UINT uFlag), FALSE)
|
DEFINE_IME_ENTRY(DWORD, ImeConversionList, (HIMC hIMC, LPCVOID lpSrc, LPCANDIDATELIST lpDst, DWORD dwBufLen, UINT uFlag), FALSE)
|
||||||
DEFINE_IME_ENTRY(BOOL, ImeRegisterWord, (LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszString), FALSE)
|
DEFINE_IME_ENTRY(BOOL, ImeRegisterWord, (LPCVOID lpszReading, DWORD dwStyle, LPCVOID lpszString), FALSE)
|
||||||
DEFINE_IME_ENTRY(BOOL, ImeUnregisterWord, (LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR 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, 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, ImeConfigure, (HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData), FALSE)
|
||||||
DEFINE_IME_ENTRY(BOOL, ImeDestroy, (UINT uReserved), FALSE)
|
DEFINE_IME_ENTRY(BOOL, ImeDestroy, (UINT uReserved), FALSE)
|
||||||
DEFINE_IME_ENTRY(LRESULT, ImeEscape, (HIMC hIMC, UINT uEscape, LPVOID lpData), FALSE)
|
DEFINE_IME_ENTRY(LRESULT, ImeEscape, (HIMC hIMC, UINT uEscape, LPVOID lpData), FALSE)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue