imm32: Re-create the IME UI window when IME changes.

This commit is contained in:
Rémi Bernon 2023-03-28 12:38:14 +02:00 committed by Alexandre Julliard
parent 2504a2d7bc
commit bb2414fdb1
2 changed files with 5 additions and 2 deletions

View file

@ -3150,21 +3150,24 @@ static BOOL is_ime_ui_msg(UINT msg)
static LRESULT ime_internal_msg( WPARAM wparam, LPARAM lparam)
{
HWND hwnd = (HWND)lparam;
HWND hwnd;
HIMC himc;
switch (wparam)
{
case IME_INTERNAL_ACTIVATE:
case IME_INTERNAL_DEACTIVATE:
hwnd = (HWND)lparam;
himc = ImmGetContext(hwnd);
ImmSetActiveContext(hwnd, himc, wparam == IME_INTERNAL_ACTIVATE);
ImmReleaseContext(hwnd, himc);
break;
case IME_INTERNAL_HKL_ACTIVATE:
ImmEnumInputContext( 0, enum_activate_layout, 0 );
hwnd = get_ime_ui_window();
break;
case IME_INTERNAL_HKL_DEACTIVATE:
hwnd = get_ime_ui_window();
break;
default:
FIXME("wparam = %Ix\n", wparam);

View file

@ -4183,7 +4183,7 @@ static void test_ImmActivateLayout(void)
ok_ret( 1, EnumThreadWindows( GetCurrentThreadId(), enum_thread_ime_windows, (LPARAM)&ime_windows ) );
ok( !!ime_windows.ime_hwnd, "missing IME window\n" );
todo_wine ok( !!ime_windows.ime_ui_hwnd, "missing IME UI window\n" );
ok( !!ime_windows.ime_ui_hwnd, "missing IME UI window\n" );
todo_wine ok_ret( (UINT_PTR)ime_windows.ime_hwnd, (UINT_PTR)GetParent( ime_windows.ime_ui_hwnd ) );
todo_ImeDestroy = TRUE; /* Wine doesn't leak the IME */