From: Paul Gofman pgofman@codeweavers.com
--- dlls/win32u/input.c | 2 +- dlls/win32u/message.c | 7 ++++++- dlls/win32u/win32u_private.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 14862e9a8a4..8c6b448ee30 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -1901,7 +1901,7 @@ static HWND set_focus_window( HWND hwnd ) /******************************************************************* * set_active_window */ -static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) +BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) { HWND previous = get_active_window(); BOOL ret; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index a0cbfbce95c..3f2203aa5dd 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -2099,8 +2099,13 @@ static LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPAR if (is_desktop_window( hwnd )) return 0; return set_window_style( hwnd, wparam, lparam ); case WM_WINE_SETACTIVEWINDOW: + { + HWND prev; + if (!wparam && NtUserGetForegroundWindow() == hwnd) return 0; - return (LRESULT)NtUserSetActiveWindow( (HWND)wparam ); + if (!set_active_window( (HWND)wparam, &prev, FALSE, TRUE )) return 0; + return (LRESULT)prev; + } case WM_WINE_KEYBOARD_LL_HOOK: case WM_WINE_MOUSE_LL_HOOK: { diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index e7a5791dc92..472ae3a4b70 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -103,6 +103,7 @@ extern BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret ); extern BOOL set_caret_blink_time( unsigned int time ); extern BOOL set_caret_pos( int x, int y ); extern BOOL set_foreground_window( HWND hwnd, BOOL mouse ); +extern BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ); extern BOOL set_ime_composition_window_pos( HWND hwnd, const POINT *point ); extern void toggle_caret( HWND hwnd ); extern void update_mouse_tracking_info( HWND hwnd );