Module: wine Branch: master Commit: 98e2bf4e1ccd5ffa4fbadf08a951754ff1cc7945 URL: http://source.winehq.org/git/wine.git/?a=commit;h=98e2bf4e1ccd5ffa4fbadf08a9...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Thu Jan 5 17:58:30 2012 +0800
user32: Add an invalid window check to SetActiveWindow.
---
dlls/user32/focus.c | 12 +++++++++--- dlls/user32/tests/msg.c | 3 +-- 2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/focus.c b/dlls/user32/focus.c index 9fdae25..6b5312f 100644 --- a/dlls/user32/focus.c +++ b/dlls/user32/focus.c @@ -232,12 +232,18 @@ HWND WINAPI SetActiveWindow( HWND hwnd )
if (hwnd) { - LONG style = GetWindowLongW( hwnd, GWL_STYLE ); + LONG style;
+ hwnd = WIN_GetFullHandle( hwnd ); + if (!IsWindow( hwnd )) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return 0; + } + + style = GetWindowLongW( hwnd, GWL_STYLE ); if ((style & (WS_POPUP|WS_CHILD)) == WS_CHILD) return GetActiveWindow(); /* Windows doesn't seem to return an error here */ - - hwnd = WIN_GetFullHandle( hwnd ); }
if (!set_active_window( hwnd, &prev, FALSE, TRUE )) return 0; diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 6fa4d10..6f40a0b 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -13602,10 +13602,9 @@ static void test_SetFocus(void)
SetLastError(0xdeadbeef); old_active = SetActiveWindow((HWND)0xdeadbeef); -todo_wine ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "expected ERROR_INVALID_WINDOW_HANDLE, got %d\n", GetLastError()); while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessage(&msg); - ok_sequence(WmEmptySeq, "SetActiveWindow on an invalid window", TRUE); + ok_sequence(WmEmptySeq, "SetActiveWindow on an invalid window", FALSE); ok(old_active == 0, "expected old focus 0, got %p\n", old_active); ok(GetActiveWindow() == parent, "expected active %p, got %p\n", parent, GetActiveWindow()); ok(GetFocus() == parent, "expected focus %p, got %p\n", parent, GetFocus());