From: Rémi Bernon rbernon@codeweavers.com
--- dlls/imm32/imm.c | 5 ++++- dlls/imm32/tests/imm32.c | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index d68930bade3..ed903cb8d00 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -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); diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index d42e1ee8af7..247d3c3114c 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -4008,7 +4008,7 @@ static DWORD CALLBACK test_activate_layout_thread( void *arg )
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 ) );
if (hkl == default_hkl) @@ -4220,7 +4220,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 ) );
thread_params.hkl = hkl; @@ -4230,7 +4230,7 @@ static void test_ImmActivateLayout(void) ok_ret( 1, CloseHandle( thread ) );
ok_ne( other_ime_windows.ime_hwnd, ime_windows.ime_hwnd, HWND, "%p" ); - todo_wine ok_ne( other_ime_windows.ime_ui_hwnd, ime_windows.ime_ui_hwnd, HWND, "%p" ); + ok_ne( other_ime_windows.ime_ui_hwnd, ime_windows.ime_ui_hwnd, HWND, "%p" );
todo_ImeDestroy = TRUE; /* Wine doesn't leak the IME */ ok_eq( hkl, ActivateKeyboardLayout( old_hkl, 0 ), HKL, "%p" );