mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 13:34:53 +00:00
[IMM32] Implement ImmWINNLSEnableIME (#4599)
- Implement imm32!ImmWINNLSEnableIME function. - Rename CLIENTIMC_UNKNOWN3 flag as CLIENTIMC_DISABLEIME. - Modify imm32.spec. CORE-11700
This commit is contained in:
parent
d519b11a28
commit
934e5212e4
|
@ -1993,3 +1993,57 @@ ImmGetImeMenuItemsW(HIMC hIMC, DWORD dwFlags, DWORD dwType,
|
|||
hIMC, dwFlags, dwType, lpImeParentMenu, lpImeMenu, dwSize);
|
||||
return ImmGetImeMenuItemsAW(hIMC, dwFlags, dwType, lpImeParentMenu, lpImeMenu, dwSize, FALSE);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* ImmWINNLSEnableIME (IMM32.@)
|
||||
*/
|
||||
BOOL WINAPI ImmWINNLSEnableIME(HWND hWnd, BOOL enable)
|
||||
{
|
||||
HIMC hIMC;
|
||||
PCLIENTIMC pClientImc;
|
||||
HWND hImeWnd;
|
||||
BOOL bImeWnd, ret;
|
||||
|
||||
TRACE("(%p, %d)\n", hWnd, enable);
|
||||
|
||||
if (!Imm32IsSystemJapaneseOrKorean())
|
||||
{
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
hIMC = (HIMC)NtUserGetThreadState(THREADSTATE_DEFAULTINPUTCONTEXT);
|
||||
if (!hIMC)
|
||||
return FALSE;
|
||||
|
||||
pClientImc = ImmLockClientImc(hIMC);
|
||||
if (!pClientImc)
|
||||
return FALSE;
|
||||
|
||||
ret = !(pClientImc->dwFlags & CLIENTIMC_DISABLEIME);
|
||||
if (!!enable == ret)
|
||||
{
|
||||
ImmUnlockClientImc(pClientImc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!IsWindow(hWnd))
|
||||
hWnd = GetFocus();
|
||||
|
||||
hImeWnd = ImmGetDefaultIMEWnd(hWnd);
|
||||
bImeWnd = IsWindow(hImeWnd);
|
||||
if (bImeWnd)
|
||||
ImmSetActiveContext(hWnd, (enable ? NULL : hIMC), FALSE);
|
||||
|
||||
if (enable)
|
||||
pClientImc->dwFlags &= ~CLIENTIMC_DISABLEIME;
|
||||
else
|
||||
pClientImc->dwFlags |= CLIENTIMC_DISABLEIME;
|
||||
|
||||
ImmUnlockClientImc(pClientImc);
|
||||
|
||||
if (bImeWnd)
|
||||
ImmSetActiveContext(hWnd, (enable ? hIMC : NULL), TRUE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -998,7 +998,7 @@ Quit:
|
|||
pClientImc = ImmLockClientImc(hIMC);
|
||||
if (pClientImc == NULL)
|
||||
return NULL;
|
||||
if ((dwContextFlags & 2) && (pClientImc->dwFlags & CLIENTIMC_UNKNOWN3))
|
||||
if ((dwContextFlags & 2) && (pClientImc->dwFlags & CLIENTIMC_DISABLEIME))
|
||||
hIMC = NULL;
|
||||
ImmUnlockClientImc(pClientImc);
|
||||
return hIMC;
|
||||
|
|
|
@ -114,6 +114,6 @@
|
|||
@ stdcall ImmUnlockImeDpi(ptr)
|
||||
@ stdcall ImmUnregisterWordA(long str long str)
|
||||
@ stdcall ImmUnregisterWordW(long wstr long wstr)
|
||||
@ stdcall -stub ImmWINNLSEnableIME(ptr long)
|
||||
@ stdcall ImmWINNLSEnableIME(ptr long)
|
||||
@ stdcall ImmWINNLSGetEnableStatus(ptr)
|
||||
@ stdcall ImmWINNLSGetIMEHotkey(ptr)
|
||||
|
|
|
@ -1326,7 +1326,7 @@ C_ASSERT(sizeof(CLIENTIMC) == 0x34);
|
|||
#define CLIENTIMC_UNKNOWN5 0x2
|
||||
#define CLIENTIMC_UNKNOWN4 0x20
|
||||
#define CLIENTIMC_DESTROY 0x40
|
||||
#define CLIENTIMC_UNKNOWN3 0x80
|
||||
#define CLIENTIMC_DISABLEIME 0x80
|
||||
#define CLIENTIMC_UNKNOWN2 0x100
|
||||
|
||||
DWORD
|
||||
|
|
Loading…
Reference in a new issue