From: Jacek Caban jacek@codeweavers.com
--- dlls/imm32/imm.c | 9 ++++++++- dlls/user32/tests/win.c | 1 - 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index d290e580a23..42cf6a712f9 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -1028,7 +1028,6 @@ static HWND imm_detach_default_window(IMMThreadData *thread_data) to_destroy = thread_data->hwndDefault; thread_data->hwndDefault = NULL; thread_data->windowRefs = 0; - imm_couninit_thread(TRUE); return to_destroy; }
@@ -3470,6 +3469,14 @@ LRESULT WINAPI __wine_ime_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp init_messages(); return TRUE;
+ case WM_DESTROY: + { + HWND default_hwnd = ImmGetDefaultIMEWnd(0); + if (!default_hwnd || hwnd == default_hwnd) + imm_couninit_thread(TRUE); + } + return TRUE; + case WM_IME_INTERNAL: return ime_internal_msg(wparam, lparam); } diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index 3727efb1b41..4c2af09d0c6 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -3760,7 +3760,6 @@ static void test_SetActiveWindow_0_proc( char **argv ) else /* < Win10 */ { ok( tmp == hwnd, "SetActiveWindow returned %p\n", tmp ); - todo_wine ok( GetLastError() == 0, "got error %lu\n", GetLastError() );
tmp = GetForegroundWindow();