[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 */ #define ROUNDUP4(n) (((n) + 3) & ~3) /* DWORD alignment */
HANDLE g_hImm32Heap = NULL; 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) LPVOID APIENTRY Imm32HeapAlloc(DWORD dwFlags, DWORD dwBytes)
{ {
@ -1023,6 +1028,11 @@ Imm32GetThreadState(DWORD Routine)
return NtUserGetThreadState(Routine); return NtUserGetThreadState(Routine);
} }
static DWORD_PTR APIENTRY Imm32QueryWindow(HWND hWnd, DWORD Index)
{
return NtUserQueryWindow(hWnd, Index);
}
static DWORD APIENTRY static DWORD APIENTRY
Imm32UpdateInputContext(HIMC hIMC, DWORD Unknown1, PCLIENTIMC pClientImc) Imm32UpdateInputContext(HIMC hIMC, DWORD Unknown1, PCLIENTIMC pClientImc)
{ {
@ -2096,14 +2106,21 @@ void WINAPI __wine_unregister_window(HWND hwnd)
*/ */
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd) HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
{ {
HWND ret; if (!(g_dwImm32Flags & IMM32_FLAG_UNKNOWN))
IMMThreadData* thread_data = IMM_GetThreadData(hWnd, 0);
if (!thread_data)
return NULL; return NULL;
ret = thread_data->hwndDefault;
LeaveCriticalSection(&threaddata_cs); if (hWnd == NULL)
TRACE("Default is %p\n",ret); return (HWND)Imm32GetThreadState(THREADSTATE_ACTIVEWINDOW);
return ret;
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 -stub ImmActivateLayout(long)
@ stdcall ImmAssociateContext(ptr ptr) @ stdcall ImmAssociateContext(ptr ptr)
@ stdcall ImmAssociateContextEx(ptr ptr long) @ stdcall ImmAssociateContextEx(ptr ptr long)