imm32: Use ImmSetActiveContext in ImmAssociateContext.
Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
266c1101b3
commit
e6d53d6301
|
@ -601,35 +601,25 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
|
|||
if (hIMC && IMM_IsCrossThreadAccess(hWnd, hIMC))
|
||||
return NULL;
|
||||
|
||||
old = GetPropW(hWnd, szwWineIMCProperty);
|
||||
defaultContext = get_default_context( hWnd );
|
||||
old = RemovePropW(hWnd, szwWineIMCProperty);
|
||||
if (old == NULL)
|
||||
if (!old)
|
||||
old = defaultContext;
|
||||
else if (old == (HIMC)-1)
|
||||
old = NULL;
|
||||
|
||||
if (hIMC != defaultContext)
|
||||
{
|
||||
if (hIMC == NULL) /* Meaning disable imm for that window*/
|
||||
SetPropW(hWnd, szwWineIMCProperty, (HANDLE)-1);
|
||||
else
|
||||
SetPropW(hWnd, szwWineIMCProperty, hIMC);
|
||||
}
|
||||
if (old == hIMC)
|
||||
return hIMC;
|
||||
|
||||
if (old)
|
||||
{
|
||||
InputContextData *old_data = old;
|
||||
if (old_data->IMC.hWnd == hWnd)
|
||||
old_data->IMC.hWnd = NULL;
|
||||
}
|
||||
|
||||
if (!hIMC)
|
||||
return old;
|
||||
|
||||
SendMessageW(data->IMC.hWnd, WM_IME_SETCONTEXT, FALSE, ISC_SHOWUIALL);
|
||||
data->IMC.hWnd = hWnd;
|
||||
SendMessageW(data->IMC.hWnd, WM_IME_SETCONTEXT, TRUE, ISC_SHOWUIALL);
|
||||
if (!hIMC) /* Meaning disable imm for that window*/
|
||||
SetPropW(hWnd, szwWineIMCProperty, (HANDLE)-1);
|
||||
else if (hIMC == defaultContext)
|
||||
RemovePropW(hWnd, szwWineIMCProperty);
|
||||
else
|
||||
SetPropW(hWnd, szwWineIMCProperty, hIMC);
|
||||
|
||||
ImmSetActiveContext(hWnd, old, FALSE);
|
||||
ImmSetActiveContext(hWnd, hIMC, TRUE);
|
||||
return old;
|
||||
}
|
||||
|
||||
|
|
|
@ -663,29 +663,55 @@ static void test_ImmAssociateContextEx(void)
|
|||
{
|
||||
HIMC retimc, newimc;
|
||||
|
||||
SET_ENABLE(WM_IME_SETCONTEXT_ACTIVATE, TRUE);
|
||||
SET_ENABLE(WM_IME_SETCONTEXT_DEACTIVATE, TRUE);
|
||||
|
||||
ok(GetActiveWindow() == hwnd, "hwnd is not active\n");
|
||||
newimc = ImmCreateContext();
|
||||
ok(newimc != imc, "handles should not be the same\n");
|
||||
rc = pImmAssociateContextEx(NULL, NULL, 0);
|
||||
ok(!rc, "ImmAssociateContextEx succeeded\n");
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
rc = pImmAssociateContextEx(hwnd, NULL, 0);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
ok(rc, "ImmAssociateContextEx failed\n");
|
||||
rc = pImmAssociateContextEx(NULL, imc, 0);
|
||||
ok(!rc, "ImmAssociateContextEx succeeded\n");
|
||||
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
rc = pImmAssociateContextEx(hwnd, imc, 0);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
ok(rc, "ImmAssociateContextEx failed\n");
|
||||
retimc = ImmGetContext(hwnd);
|
||||
ok(retimc == imc, "handles should be the same\n");
|
||||
ImmReleaseContext(hwnd,retimc);
|
||||
|
||||
rc = pImmAssociateContextEx(hwnd, imc, 0);
|
||||
ok(rc, "ImmAssociateContextEx failed\n");
|
||||
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
rc = pImmAssociateContextEx(hwnd, newimc, 0);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
ok(rc, "ImmAssociateContextEx failed\n");
|
||||
retimc = ImmGetContext(hwnd);
|
||||
ok(retimc == newimc, "handles should be the same\n");
|
||||
ImmReleaseContext(hwnd,retimc);
|
||||
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
SET_EXPECT(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
rc = pImmAssociateContextEx(hwnd, NULL, IACE_DEFAULT);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_DEACTIVATE);
|
||||
CHECK_CALLED(WM_IME_SETCONTEXT_ACTIVATE);
|
||||
ok(rc, "ImmAssociateContextEx failed\n");
|
||||
|
||||
SET_ENABLE(WM_IME_SETCONTEXT_ACTIVATE, FALSE);
|
||||
SET_ENABLE(WM_IME_SETCONTEXT_DEACTIVATE, FALSE);
|
||||
}
|
||||
ImmReleaseContext(hwnd,imc);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue