[IMM32] Rewrite ImmGetDefaultIMEWnd (#3821)

- Rewrite ImmGetDefaultIMEWnd function.
- Add g_dwImm32Flags global variable.
- Add Imm32QueryWindow helper function.
- Implement CtfImmIsCiceroEnabled function.
- Modify imm32.spec.
CORE-11700
This commit is contained in:
Katayama Hirofumi MZ 2021-07-15 21:59:53 +09:00 committed by GitHub
parent 77e891b8ab
commit 3714ee269b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 7 deletions

View file

@ -1005,6 +1005,11 @@ LRESULT WINAPI ImmEscapeW(
#define ROUNDUP4(n) (((n) + 3) & ~3) /* DWORD alignment */
HANDLE g_hImm32Heap = NULL;
DWORD g_dwImm32Flags = 0;
/* flags for g_dwImm32Flags */
#define IMM32_FLAG_UNKNOWN 0x4
#define IMM32_FLAG_CICERO_ENABLED 0x20
LPVOID APIENTRY Imm32HeapAlloc(DWORD dwFlags, DWORD dwBytes)
{
@ -1023,6 +1028,11 @@ Imm32GetThreadState(DWORD Routine)
return NtUserGetThreadState(Routine);
}
static DWORD_PTR APIENTRY Imm32QueryWindow(HWND hWnd, DWORD Index)
{
return NtUserQueryWindow(hWnd, Index);
}
static DWORD APIENTRY
Imm32UpdateInputContext(HIMC hIMC, DWORD Unknown1, PCLIENTIMC pClientImc)
{
@ -2096,14 +2106,21 @@ void WINAPI __wine_unregister_window(HWND hwnd)
*/
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
{
HWND ret;
IMMThreadData* thread_data = IMM_GetThreadData(hWnd, 0);
if (!thread_data)
if (!(g_dwImm32Flags & IMM32_FLAG_UNKNOWN))
return NULL;
ret = thread_data->hwndDefault;
LeaveCriticalSection(&threaddata_cs);
TRACE("Default is %p\n",ret);
return ret;
if (hWnd == NULL)
return (HWND)Imm32GetThreadState(THREADSTATE_ACTIVEWINDOW);
return (HWND)Imm32QueryWindow(hWnd, QUERY_WINDOW_DEFAULT_IME);
}
/***********************************************************************
* CtfImmIsCiceroEnabled (IMM32.@)
*/
BOOL WINAPI CtfImmIsCiceroEnabled(VOID)
{
return !!(g_dwImm32Flags & IMM32_FLAG_CICERO_ENABLED);
}
/***********************************************************************

View file

@ -1,3 +1,4 @@
@ stdcall CtfImmIsCiceroEnabled()
@ stdcall -stub ImmActivateLayout(long)
@ stdcall ImmAssociateContext(ptr ptr)
@ stdcall ImmAssociateContextEx(ptr ptr long)