mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 14:56:31 +00:00
[IMM32] Rewrite ImmUnregisterWordA (#3893)
Implementing Japanese input... CORE-11700
This commit is contained in:
parent
94285dce4d
commit
1ead16de95
1 changed files with 48 additions and 20 deletions
|
@ -4105,28 +4105,56 @@ BOOL WINAPI ImmSimulateHotKey(HWND hWnd, DWORD dwHotKeyID)
|
||||||
BOOL WINAPI ImmUnregisterWordA(
|
BOOL WINAPI ImmUnregisterWordA(
|
||||||
HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszUnregister)
|
HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszUnregister)
|
||||||
{
|
{
|
||||||
ImmHkl *immHkl = IMM_GetImmHkl(hKL);
|
BOOL ret = FALSE;
|
||||||
TRACE("(%p, %s, %d, %s):\n", hKL, debugstr_a(lpszReading), dwStyle,
|
PIMEDPI pImeDpi;
|
||||||
debugstr_a(lpszUnregister));
|
LPWSTR pszReadingW = NULL, pszUnregisterW = NULL;
|
||||||
if (immHkl->hIME && immHkl->pImeUnregisterWord)
|
INT cch;
|
||||||
{
|
|
||||||
if (!is_kbd_ime_unicode(immHkl))
|
|
||||||
return immHkl->pImeUnregisterWord((LPCWSTR)lpszReading,dwStyle,
|
|
||||||
(LPCWSTR)lpszUnregister);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LPWSTR lpszwReading = strdupAtoW(lpszReading);
|
|
||||||
LPWSTR lpszwUnregister = strdupAtoW(lpszUnregister);
|
|
||||||
BOOL rc;
|
|
||||||
|
|
||||||
rc = immHkl->pImeUnregisterWord(lpszwReading,dwStyle,lpszwUnregister);
|
TRACE("(%p, %s, 0x%lX, %s)\n", hKL, debugstr_a(lpszReading), dwStyle,
|
||||||
HeapFree(GetProcessHeap(),0,lpszwReading);
|
debugstr_a(lpszUnregister));
|
||||||
HeapFree(GetProcessHeap(),0,lpszwUnregister);
|
|
||||||
return rc;
|
pImeDpi = ImmLockOrLoadImeDpi(hKL);
|
||||||
}
|
if (pImeDpi == NULL)
|
||||||
}
|
|
||||||
else
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
if (!(pImeDpi->ImeInfo.fdwProperty & IME_PROP_UNICODE))
|
||||||
|
{
|
||||||
|
ret = pImeDpi->ImeUnregisterWord(lpszReading, dwStyle, lpszUnregister);
|
||||||
|
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 (lpszUnregister)
|
||||||
|
{
|
||||||
|
cch = lstrlenA(lpszUnregister);
|
||||||
|
pszUnregisterW = Imm32HeapAlloc(0, (cch + 1) * sizeof(WCHAR));
|
||||||
|
if (pszUnregisterW == NULL)
|
||||||
|
goto Quit;
|
||||||
|
cch = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszUnregister, cch,
|
||||||
|
pszUnregisterW, cch + 1);
|
||||||
|
pszUnregisterW[cch] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = pImeDpi->ImeUnregisterWord(pszReadingW, dwStyle, pszUnregisterW);
|
||||||
|
|
||||||
|
Quit:
|
||||||
|
if (pszReadingW)
|
||||||
|
HeapFree(g_hImm32Heap, 0, pszReadingW);
|
||||||
|
if (pszUnregisterW)
|
||||||
|
HeapFree(g_hImm32Heap, 0, pszUnregisterW);
|
||||||
|
ImmUnlockImeDpi(pImeDpi);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue