[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:
Katayama Hirofumi MZ 2022-08-09 20:09:23 +09:00 committed by GitHub
parent d519b11a28
commit 934e5212e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 3 deletions

View file

@ -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;
}

View file

@ -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;

View file

@ -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)

View file

@ -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