mirror of
https://github.com/reactos/reactos.git
synced 2025-05-31 23:18:39 +00:00
[IMM32][SDK] Implement GetKeyboardLayoutCP (#6068)
- Add IMM32!GetKeyboardLayoutCP function. - Add it to <imm32_undoc.h>. - Delete ImmDisableLegacyIME and ImmSendMessageToActiveDefImeWndW functions (2k3/xp IMM32 doesn't have such functions). - Modify imm32.spec. - Refer ntdll!RtlDllShutdownInProgress function (that is WinXP+). CORE-19268
This commit is contained in:
parent
40b6b1dab3
commit
d795021a75
6 changed files with 34 additions and 51 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* PROJECT: ReactOS IMM32
|
* PROJECT: ReactOS IMM32
|
||||||
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||||
* PURPOSE: Implementing the IMM32 Cicero-aware Text Framework (CTF)
|
* PURPOSE: Implementing IMM CTF (Collaborative Translation Framework)
|
||||||
* COPYRIGHT: Copyright 2022-2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
* COPYRIGHT: Copyright 2022-2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -11,11 +11,8 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(imm);
|
WINE_DEFAULT_DEBUG_CHANNEL(imm);
|
||||||
|
|
||||||
/* FIXME: Use RTL */
|
/* FIXME: Use proper header */
|
||||||
static BOOL WINAPI RtlDllShutdownInProgress(VOID)
|
BOOLEAN WINAPI RtlDllShutdownInProgress(VOID);
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL Imm32InsideLoaderLock(VOID)
|
static BOOL Imm32InsideLoaderLock(VOID)
|
||||||
{
|
{
|
||||||
|
@ -201,17 +198,7 @@ VOID Imm32TF_InvalidAssemblyListCacheIfExist(VOID)
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CTF IME support
|
* CTF (Collaborative Translation Framework) IME support
|
||||||
*
|
|
||||||
* TSF stands for "Text Services Framework". "Cicero" is the code name of TSF.
|
|
||||||
* CTF stands for "Cicero-aware Text Framework".
|
|
||||||
*
|
|
||||||
* Comparing with old-style IMM IME, the combination of CTF IME and TSF provides
|
|
||||||
* new-style and high-level input method.
|
|
||||||
*
|
|
||||||
* The CTF IME file is a DLL file that the software developer distributes.
|
|
||||||
* The export functions of the CTF IME file are defined in <CtfImeTable.h> of
|
|
||||||
* this folder.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* "Active IMM" compatibility flags */
|
/* "Active IMM" compatibility flags */
|
||||||
|
|
|
@ -925,15 +925,6 @@ BOOL WINAPI ImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* ImmDisableLegacyIME(IMM32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI ImmDisableLegacyIME(void)
|
|
||||||
{
|
|
||||||
FIXME("stub\n");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ImmGetImeInfoEx (IMM32.@)
|
* ImmGetImeInfoEx (IMM32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -14,13 +14,12 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(imm);
|
WINE_DEFAULT_DEBUG_CHANNEL(imm);
|
||||||
|
|
||||||
HMODULE ghImm32Inst = NULL; // Win: ghInst
|
HMODULE ghImm32Inst = NULL; /* The IMM32 instance */
|
||||||
PSERVERINFO gpsi = NULL; // Win: gpsi
|
PSERVERINFO gpsi = NULL;
|
||||||
SHAREDINFO gSharedInfo = { NULL }; // Win: gSharedInfo
|
SHAREDINFO gSharedInfo = { NULL };
|
||||||
BYTE gfImmInitialized = FALSE; // Win: gfInitialized
|
BYTE gfImmInitialized = FALSE; /* Is IMM32 initialized? */
|
||||||
ULONG_PTR gHighestUserAddress = 0;
|
ULONG_PTR gHighestUserAddress = 0;
|
||||||
|
|
||||||
// Win: ImmInitializeGlobals
|
|
||||||
static BOOL APIENTRY ImmInitializeGlobals(HMODULE hMod)
|
static BOOL APIENTRY ImmInitializeGlobals(HMODULE hMod)
|
||||||
{
|
{
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
|
@ -1257,6 +1256,29 @@ BOOL WINAPI ImmSetActiveContextConsoleIME(HWND hwnd, BOOL fFlag)
|
||||||
return ImmSetActiveContext(hwnd, hIMC, fFlag);
|
return ImmSetActiveContext(hwnd, hIMC, fFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetKeyboardLayoutCP (IMM32.@)
|
||||||
|
*/
|
||||||
|
UINT WINAPI GetKeyboardLayoutCP(_In_ LANGID wLangId)
|
||||||
|
{
|
||||||
|
WCHAR szText[8];
|
||||||
|
static LANGID s_wKeyboardLangIdCache = 0;
|
||||||
|
static UINT s_uKeyboardLayoutCPCache = 0;
|
||||||
|
|
||||||
|
TRACE("(%u)\n", wLangId);
|
||||||
|
|
||||||
|
if (wLangId == s_wKeyboardLangIdCache)
|
||||||
|
return s_uKeyboardLayoutCPCache;
|
||||||
|
|
||||||
|
if (!GetLocaleInfoW(wLangId, LOCALE_IDEFAULTANSICODEPAGE, szText, _countof(szText)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
s_wKeyboardLangIdCache = wLangId;
|
||||||
|
szText[_countof(szText) - 1] = UNICODE_NULL; /* Avoid buffer overrun */
|
||||||
|
s_uKeyboardLayoutCPCache = wcstol(szText, NULL, 10);
|
||||||
|
return s_uKeyboardLayoutCPCache;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
VOID APIENTRY Imm32UnitTest(VOID)
|
VOID APIENTRY Imm32UnitTest(VOID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
@ stdcall CtfImmSetAppCompatFlags(long)
|
@ stdcall CtfImmSetAppCompatFlags(long)
|
||||||
@ stdcall CtfImmSetCiceroStartInThread(long)
|
@ stdcall CtfImmSetCiceroStartInThread(long)
|
||||||
@ stdcall CtfImmTIMActivate(ptr)
|
@ stdcall CtfImmTIMActivate(ptr)
|
||||||
|
@ stdcall GetKeyboardLayoutCP(long)
|
||||||
@ stdcall ImmActivateLayout(ptr)
|
@ stdcall ImmActivateLayout(ptr)
|
||||||
@ stdcall ImmAssociateContext(ptr ptr)
|
@ stdcall ImmAssociateContext(ptr ptr)
|
||||||
@ stdcall ImmAssociateContextEx(ptr ptr long)
|
@ stdcall ImmAssociateContextEx(ptr ptr long)
|
||||||
|
@ -31,7 +32,6 @@
|
||||||
@ stdcall ImmDestroySoftKeyboard(ptr)
|
@ stdcall ImmDestroySoftKeyboard(ptr)
|
||||||
@ stdcall ImmDisableIME(long)
|
@ stdcall ImmDisableIME(long)
|
||||||
@ stdcall ImmDisableIme(long) ImmDisableIME
|
@ stdcall ImmDisableIme(long) ImmDisableIME
|
||||||
@ stdcall ImmDisableLegacyIME()
|
|
||||||
@ stdcall ImmDisableTextFrameService(long)
|
@ stdcall ImmDisableTextFrameService(long)
|
||||||
@ stdcall ImmEnumInputContext(long ptr long)
|
@ stdcall ImmEnumInputContext(long ptr long)
|
||||||
@ stdcall ImmEnumRegisterWordA(long ptr str long str ptr)
|
@ stdcall ImmEnumRegisterWordA(long ptr str long str ptr)
|
||||||
|
@ -105,7 +105,6 @@
|
||||||
@ stdcall ImmRequestMessageW(ptr ptr ptr)
|
@ stdcall ImmRequestMessageW(ptr ptr ptr)
|
||||||
@ stdcall ImmSendIMEMessageExA(ptr ptr)
|
@ stdcall ImmSendIMEMessageExA(ptr ptr)
|
||||||
@ stdcall ImmSendIMEMessageExW(ptr ptr)
|
@ stdcall ImmSendIMEMessageExW(ptr ptr)
|
||||||
@ stdcall ImmSendMessageToActiveDefImeWndW(long ptr ptr)
|
|
||||||
@ stdcall ImmSetActiveContext(ptr ptr long)
|
@ stdcall ImmSetActiveContext(ptr ptr long)
|
||||||
@ stdcall ImmSetActiveContextConsoleIME(ptr long)
|
@ stdcall ImmSetActiveContextConsoleIME(ptr long)
|
||||||
@ stdcall ImmSetCandidateWindow(ptr ptr)
|
@ stdcall ImmSetCandidateWindow(ptr ptr)
|
||||||
|
|
|
@ -1184,24 +1184,6 @@ LRESULT WINAPI ImmRequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam)
|
||||||
return ImmRequestMessageAW(hIMC, wParam, lParam, FALSE);
|
return ImmRequestMessageAW(hIMC, wParam, lParam, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* ImmSendMessageToActiveDefImeWndW (IMM32.@)
|
|
||||||
*/
|
|
||||||
LRESULT WINAPI
|
|
||||||
ImmSendMessageToActiveDefImeWndW(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
HWND hwndIME;
|
|
||||||
|
|
||||||
if (uMsg != WM_COPYDATA)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
hwndIME = (HWND)NtUserQueryWindow((HWND)wParam, QUERY_WINDOW_DEFAULT_IME);
|
|
||||||
if (IS_NULL_UNEXPECTEDLY(hwndIME))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return SendMessageW(hwndIME, uMsg, wParam, lParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ImmCallImeConsoleIME (IMM32.@)
|
* ImmCallImeConsoleIME (IMM32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
UINT WINAPI GetKeyboardLayoutCP(_In_ LANGID wLangId);
|
||||||
|
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
ImmGetImeInfoEx(PIMEINFOEX pImeInfoEx, IMEINFOEXCLASS SearchType, PVOID pvSearchKey);
|
ImmGetImeInfoEx(PIMEINFOEX pImeInfoEx, IMEINFOEXCLASS SearchType, PVOID pvSearchKey);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue