[IMM32] Fix ImmSetActiveContext

CORE-11700
This commit is contained in:
Katayama Hirofumi MZ 2022-10-21 13:07:11 +09:00
parent 2865423abe
commit 962c4557b5

View file

@ -477,6 +477,7 @@ BOOL WINAPI ImmActivateLayout(HKL hKL)
return TRUE; return TRUE;
} }
/* Win: Internal_CtfImeSetActiveContextAlways */
static VOID APIENTRY Imm32CiceroSetActiveContext(HIMC hIMC, BOOL fActive, HWND hWnd, HKL hKL) static VOID APIENTRY Imm32CiceroSetActiveContext(HIMC hIMC, BOOL fActive, HWND hWnd, HKL hKL)
{ {
TRACE("We have to do something\n"); TRACE("We have to do something\n");
@ -1129,9 +1130,10 @@ BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
PCLIENTIMC pClientImc; PCLIENTIMC pClientImc;
LPINPUTCONTEXTDX pIC; LPINPUTCONTEXTDX pIC;
PIMEDPI pImeDpi; PIMEDPI pImeDpi;
HIMC hOldIMC;
HKL hKL; HKL hKL;
BOOL fOpen = FALSE; BOOL fOpen = FALSE;
DWORD dwConversion = 0, iShow = ISC_SHOWUIALL; DWORD dwConversion = 0, dwShowFlags = ISC_SHOWUIALL;
HWND hwndDefIME; HWND hwndDefIME;
TRACE("(%p, %p, %d)\n", hWnd, hIMC, fActive); TRACE("(%p, %p, %d)\n", hWnd, hIMC, fActive);
@ -1144,7 +1146,7 @@ BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
if (!fActive) if (!fActive)
{ {
if (pClientImc) if (pClientImc)
pClientImc->dwFlags &= ~CLIENTIMC_UNKNOWN4; pClientImc->dwFlags &= ~CLIENTIMC_UNKNOWN5;
} }
else if (hIMC) else if (hIMC)
{ {
@ -1162,7 +1164,7 @@ BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
pClientImc->dwFlags |= CLIENTIMC_UNKNOWN5; pClientImc->dwFlags |= CLIENTIMC_UNKNOWN5;
if (pIC->dwUIFlags & 2) if (pIC->dwUIFlags & 2)
iShow = (ISC_SHOWUIGUIDELINE | ISC_SHOWUIALLCANDIDATEWINDOW); dwShowFlags = (ISC_SHOWUIGUIDELINE | ISC_SHOWUIALLCANDIDATEWINDOW);
fOpen = pIC->fOpen; fOpen = pIC->fOpen;
dwConversion = pIC->fdwConversion; dwConversion = pIC->fdwConversion;
@ -1171,18 +1173,16 @@ BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
} }
else else
{ {
hIMC = ImmGetSaveContext(hWnd, 1); hOldIMC = ImmGetSaveContext(hWnd, 1);
pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hIMC); pIC = (LPINPUTCONTEXTDX)ImmLockIMC(hOldIMC);
if (pIC) if (pIC)
{ {
pIC->hWnd = hWnd; pIC->hWnd = hWnd;
ImmUnlockIMC(hIMC); ImmUnlockIMC(hOldIMC);
} }
hIMC = NULL;
} }
hKL = GetKeyboardLayout(0); hKL = GetKeyboardLayout(0);
if (IS_CICERO_MODE() && !IS_16BIT_MODE()) if (IS_CICERO_MODE() && !IS_16BIT_MODE())
{ {
Imm32CiceroSetActiveContext(hIMC, fActive, hWnd, hKL); Imm32CiceroSetActiveContext(hIMC, fActive, hWnd, hKL);
@ -1199,7 +1199,7 @@ BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
if (IsWindow(hWnd)) if (IsWindow(hWnd))
{ {
SendMessageW(hWnd, WM_IME_SETCONTEXT, fActive, iShow); SendMessageW(hWnd, WM_IME_SETCONTEXT, fActive, dwShowFlags);
if (fActive) if (fActive)
NtUserNotifyIMEStatus(hWnd, fOpen, dwConversion); NtUserNotifyIMEStatus(hWnd, fOpen, dwConversion);
} }
@ -1207,7 +1207,7 @@ BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
{ {
hwndDefIME = ImmGetDefaultIMEWnd(NULL); hwndDefIME = ImmGetDefaultIMEWnd(NULL);
if (hwndDefIME) if (hwndDefIME)
SendMessageW(hwndDefIME, WM_IME_SETCONTEXT, 0, iShow); SendMessageW(hwndDefIME, WM_IME_SETCONTEXT, 0, dwShowFlags);
} }
if (pClientImc) if (pClientImc)