mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
[IMM32] Rewrite ImmAssociateContextEx (#3961)
- Rewrite ImmAssociateContextEx function. - Modify NtUserAssociateInputContext prototype. CORE-11700
This commit is contained in:
parent
afb6c8a129
commit
df6fff78bb
|
@ -254,48 +254,50 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Helper function for ImmAssociateContextEx
|
|
||||||
*/
|
|
||||||
static BOOL CALLBACK _ImmAssociateContextExEnumProc(HWND hwnd, LPARAM lParam)
|
|
||||||
{
|
|
||||||
HIMC hImc = (HIMC)lParam;
|
|
||||||
ImmAssociateContext(hwnd,hImc);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ImmAssociateContextEx (IMM32.@)
|
* ImmAssociateContextEx (IMM32.@)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
||||||
{
|
{
|
||||||
TRACE("(%p, %p, 0x%x):\n", hWnd, hIMC, dwFlags);
|
HWND hwndFocus;
|
||||||
|
PWND pFocusWnd;
|
||||||
|
HIMC hOldIMC = NULL;
|
||||||
|
DWORD dwValue;
|
||||||
|
|
||||||
if (!hWnd)
|
TRACE("(%p, %p, 0x%lX)\n", hWnd, hIMC, dwFlags);
|
||||||
|
|
||||||
|
if (!g_psi || !(g_psi->dwSRVIFlags & SRVINFO_IMM32))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
switch (dwFlags)
|
if (hIMC && !(dwFlags & IACE_DEFAULT) && Imm32IsCrossThreadAccess(hIMC))
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
ImmAssociateContext(hWnd,hIMC);
|
|
||||||
return TRUE;
|
|
||||||
case IACE_DEFAULT:
|
|
||||||
{
|
|
||||||
HIMC defaultContext = get_default_context( hWnd );
|
|
||||||
if (!defaultContext) return FALSE;
|
|
||||||
ImmAssociateContext(hWnd,defaultContext);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
case IACE_IGNORENOCONTEXT:
|
|
||||||
if (GetPropW(hWnd,szwWineIMCProperty))
|
|
||||||
ImmAssociateContext(hWnd,hIMC);
|
|
||||||
return TRUE;
|
|
||||||
case IACE_CHILDREN:
|
|
||||||
EnumChildWindows(hWnd,_ImmAssociateContextExEnumProc,(LPARAM)hIMC);
|
|
||||||
return TRUE;
|
|
||||||
default:
|
|
||||||
FIXME("Unknown dwFlags 0x%x\n",dwFlags);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
hwndFocus = (HWND)NtUserQueryWindow(hWnd, QUERY_WINDOW_FOCUS);
|
||||||
|
pFocusWnd = ValidateHwndNoErr(hwndFocus);
|
||||||
|
if (pFocusWnd)
|
||||||
|
hOldIMC = pFocusWnd->hImc;
|
||||||
|
|
||||||
|
dwValue = NtUserAssociateInputContext(hWnd, hIMC, dwFlags);
|
||||||
|
switch (dwValue)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
pFocusWnd = ValidateHwndNoErr(hwndFocus);
|
||||||
|
if (pFocusWnd)
|
||||||
|
{
|
||||||
|
hIMC = pFocusWnd->hImc;
|
||||||
|
if (hIMC != hOldIMC)
|
||||||
|
{
|
||||||
|
ImmSetActiveContext(hwndFocus, hOldIMC, FALSE);
|
||||||
|
ImmSetActiveContext(hwndFocus, hIMC, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -627,6 +627,7 @@ BOOL WINAPI ImmConfigureIMEW(_In_ HKL, _In_ HWND, _In_ DWORD, _In_ LPVOID);
|
||||||
#define ImmConfigureIME WINELIB_NAME_AW(ImmConfigureIME)
|
#define ImmConfigureIME WINELIB_NAME_AW(ImmConfigureIME)
|
||||||
|
|
||||||
HIMC WINAPI ImmCreateContext(void);
|
HIMC WINAPI ImmCreateContext(void);
|
||||||
|
BOOL WINAPI ImmSetActiveContext(HWND hwnd, HIMC hIMC, BOOL fFlag);
|
||||||
BOOL WINAPI ImmDestroyContext(_In_ HIMC hIMC);
|
BOOL WINAPI ImmDestroyContext(_In_ HIMC hIMC);
|
||||||
BOOL WINAPI ImmDisableIME(_In_ DWORD idThread);
|
BOOL WINAPI ImmDisableIME(_In_ DWORD idThread);
|
||||||
BOOL WINAPI ImmEnumInputContext(_In_ DWORD, _In_ IMCENUMPROC, _In_ LPARAM);
|
BOOL WINAPI ImmEnumInputContext(_In_ DWORD, _In_ IMCENUMPROC, _In_ LPARAM);
|
||||||
|
|
|
@ -1317,10 +1317,7 @@ C_ASSERT(sizeof(CLIENTIMC) == 0x34);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserAssociateInputContext(
|
NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags);
|
||||||
DWORD dwUnknown1,
|
|
||||||
DWORD dwUnknown2,
|
|
||||||
DWORD dwUnknown3);
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -11,10 +11,7 @@ DBG_DEFAULT_CHANNEL(UserMisc);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
APIENTRY
|
APIENTRY
|
||||||
NtUserAssociateInputContext(
|
NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
||||||
DWORD dwUnknown1,
|
|
||||||
DWORD dwUnknown2,
|
|
||||||
DWORD dwUnknown3)
|
|
||||||
{
|
{
|
||||||
STUB
|
STUB
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue