[IMM32] Fix & Rename: s/Imm32LockIMCEx/Imm32InternalLockIMC/ (#4436)

- Fix & Rename: s/Imm32InitContext/Imm32CreateInputContext/ (Win: IMM32!CreateInputContext).
- Fix & Rename: s/Imm32LockIMCEx/Imm32InternalLockIMC/ (Win: IMM32!InternalImmLockIMC).
- Add CtfImmTIMCreateInputContext stub.
CORE-11700
This commit is contained in:
Katayama Hirofumi MZ 2022-04-08 22:23:30 +09:00 committed by GitHub
parent c3fac567ca
commit 8de7439887
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 60 deletions

View file

@ -38,6 +38,13 @@ HRESULT APIENTRY CtfImmTIMDestroyInputContext(HIMC hIMC)
return Imm32CtfImeDestroyInputContext(hIMC);
}
// Win: CtfImmTIMCreateInputContext
HRESULT APIENTRY CtfImmTIMCreateInputContext(HIMC hIMC)
{
FIXME("(%p)\n", hIMC);
return E_NOTIMPL;
}
/***********************************************************************
* CtfImmIsCiceroEnabled (IMM32.@)
*/

View file

@ -242,7 +242,7 @@ VOID APIENTRY Imm32SelectLayout(HKL hNewKL, HKL hOldKL, HIMC hIMC)
}
}
pIC = (LPINPUTCONTEXTDX)Imm32LockIMCEx(hIMC, FALSE);
pIC = (LPINPUTCONTEXTDX)Imm32InternalLockIMC(hIMC, FALSE);
if (!pIC)
{
if (pNewImeDpi)
@ -713,15 +713,16 @@ Finish:
return NtUserDestroyInputContext(hIMC);
}
// NOTE: Windows does recursive call ImmLockIMC here but we don't do so.
// Win: BOOL CreateInputContext(HIMC hIMC, HKL hKL, BOOL fSelect)
BOOL APIENTRY
Imm32InitContext(HIMC hIMC, LPINPUTCONTEXT pIC, PCLIENTIMC pClientImc, HKL hKL, BOOL fSelect)
Imm32CreateInputContext(HIMC hIMC, LPINPUTCONTEXT pIC, PCLIENTIMC pClientImc, HKL hKL, BOOL fSelect)
{
DWORD dwIndex, cbPrivate;
PIMEDPI pImeDpi = NULL;
LPCOMPOSITIONSTRING pCS;
LPCANDIDATEINFO pCI;
LPGUIDELINE pGL;
/* NOTE: Windows does recursive call ImmLockIMC here but we don't do so. */
/* Create IC components */
pIC->hCompStr = ImmCreateIMCC(sizeof(COMPOSITIONSTRING));
@ -809,16 +810,15 @@ Fail:
}
// Win: InternalImmLockIMC
LPINPUTCONTEXT APIENTRY Imm32LockIMCEx(HIMC hIMC, BOOL fSelect)
LPINPUTCONTEXT APIENTRY Imm32InternalLockIMC(HIMC hIMC, BOOL fSelect)
{
HANDLE hIC;
LPINPUTCONTEXT pIC = NULL;
PCLIENTIMC pClientImc;
WORD Word;
WORD LangID;
DWORD dwThreadId;
HKL hKL, hNewKL;
HKL hOldKL, hNewKL;
PIMEDPI pImeDpi = NULL;
BOOL bInited;
pClientImc = ImmLockClientImc(hIMC);
if (!pClientImc)
@ -826,68 +826,53 @@ LPINPUTCONTEXT APIENTRY Imm32LockIMCEx(HIMC hIMC, BOOL fSelect)
RtlEnterCriticalSection(&pClientImc->cs);
if (!pClientImc->hInputContext)
if (pClientImc->hInputContext)
goto Finish;
dwThreadId = (DWORD)NtUserQueryInputContext(hIMC, QIC_INPUTTHREADID);
if (dwThreadId == GetCurrentThreadId() && Imm32IsCiceroMode() && !Imm32Is16BitMode())
{
dwThreadId = (DWORD)NtUserQueryInputContext(hIMC, QIC_INPUTTHREADID);
hOldKL = GetKeyboardLayout(0);
LangID = LOWORD(hOldKL);
hNewKL = (HKL)(DWORD_PTR)MAKELONG(LangID, LangID);
if (dwThreadId == GetCurrentThreadId() && Imm32IsCiceroMode() && !Imm32Is16BitMode())
pImeDpi = Imm32FindOrLoadImeDpi(hNewKL);
if (pImeDpi)
{
hKL = GetKeyboardLayout(0);
Word = LOWORD(hKL);
hNewKL = (HKL)(DWORD_PTR)MAKELONG(Word, Word);
pImeDpi = Imm32FindOrLoadImeDpi(hNewKL);
if (pImeDpi)
{
FIXME("We have to do something here\n");
}
}
if (!NtUserQueryInputContext(hIMC, QIC_DEFAULTWINDOWIME))
{
RtlLeaveCriticalSection(&pClientImc->cs);
goto Quit;
}
hIC = LocalAlloc(LHND, sizeof(INPUTCONTEXTDX));
if (!hIC)
{
RtlLeaveCriticalSection(&pClientImc->cs);
goto Quit;
}
pClientImc->hInputContext = hIC;
pIC = LocalLock(pClientImc->hInputContext);
if (!pIC)
{
pClientImc->hInputContext = LocalFree(pClientImc->hInputContext);
RtlLeaveCriticalSection(&pClientImc->cs);
goto Quit;
}
hKL = GetKeyboardLayout(dwThreadId);
// bInited = Imm32InitContext(hIMC, hKL, fSelect);
bInited = Imm32InitContext(hIMC, pIC, pClientImc, hKL, fSelect);
LocalUnlock(pClientImc->hInputContext);
if (!bInited)
{
pIC = NULL;
pClientImc->hInputContext = LocalFree(pClientImc->hInputContext);
RtlLeaveCriticalSection(&pClientImc->cs);
goto Quit;
CtfImmTIMActivate(hNewKL);
}
}
FIXME("We have to do something here\n");
if (!NtUserQueryInputContext(hIMC, QIC_DEFAULTWINDOWIME))
goto Quit;
hIC = LocalAlloc(LHND, sizeof(INPUTCONTEXTDX));
pIC = LocalLock(hIC);
if (!pIC)
{
LocalFree(hIC);
goto Quit;
}
pClientImc->hInputContext = hIC;
hNewKL = GetKeyboardLayout(dwThreadId);
if (!Imm32CreateInputContext(hIMC, pIC, pClientImc, hNewKL, fSelect))
{
pClientImc->hInputContext = LocalFree(pClientImc->hInputContext);
goto Quit;
}
Finish:
CtfImmTIMCreateInputContext(hIMC);
RtlLeaveCriticalSection(&pClientImc->cs);
pIC = LocalLock(pClientImc->hInputContext);
InterlockedIncrement(&pClientImc->cLockObj);
Quit:
ImmUnlockClientImc(pClientImc);
return pIC;
Quit:
RtlLeaveCriticalSection(&pClientImc->cs);
ImmUnlockClientImc(pClientImc);
return NULL;
}
/***********************************************************************
@ -1030,7 +1015,7 @@ HIMC WINAPI ImmGetContext(HWND hWnd)
LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC)
{
TRACE("(%p)\n", hIMC);
return Imm32LockIMCEx(hIMC, TRUE);
return Imm32InternalLockIMC(hIMC, TRUE);
}
/***********************************************************************

View file

@ -92,7 +92,7 @@ LPSTR APIENTRY Imm32AnsiFromWide(LPCWSTR pszW);
LONG APIENTRY IchWideFromAnsi(LONG cchAnsi, LPCSTR pchAnsi, UINT uCodePage);
LONG APIENTRY IchAnsiFromWide(LONG cchWide, LPCWSTR pchWide, UINT uCodePage);
PIMEDPI APIENTRY Imm32FindOrLoadImeDpi(HKL hKL);
LPINPUTCONTEXT APIENTRY Imm32LockIMCEx(HIMC hIMC, BOOL fSelect);
LPINPUTCONTEXT APIENTRY Imm32InternalLockIMC(HIMC hIMC, BOOL fSelect);
BOOL APIENTRY Imm32ReleaseIME(HKL hKL);
BOOL APIENTRY Imm32IsSystemJapaneseOrKorean(VOID);

View file

@ -18,7 +18,9 @@ PCLIENTIMC WINAPI ImmLockClientImc(HIMC hImc);
VOID WINAPI ImmUnlockClientImc(PCLIENTIMC pClientImc);
PIMEDPI WINAPI ImmLockImeDpi(HKL hKL);
VOID WINAPI ImmUnlockImeDpi(PIMEDPI pImeDpi);
HRESULT APIENTRY CtfImmTIMCreateInputContext(HIMC hIMC);
HRESULT APIENTRY CtfImmTIMDestroyInputContext(HIMC hIMC);
HRESULT WINAPI CtfImmTIMActivate(HKL hKL);
#ifdef __cplusplus
} // extern "C"