user: Improve SetActiveWindow test, add SetForegroundWindow test, make them pass under Wine.
This commit is contained in:
parent
eb527c82e2
commit
19e7fab981
|
@ -299,7 +299,8 @@ HWND WINAPI SetFocus( HWND hwnd )
|
|||
BOOL WINAPI SetForegroundWindow( HWND hwnd )
|
||||
{
|
||||
TRACE( "%p\n", hwnd );
|
||||
if (hwnd) hwnd = WIN_GetFullHandle( hwnd );
|
||||
|
||||
hwnd = WIN_GetFullHandle( hwnd );
|
||||
return set_foreground_window( hwnd, FALSE );
|
||||
}
|
||||
|
||||
|
|
|
@ -2101,40 +2101,6 @@ static void test_SetFocus(HWND hwnd)
|
|||
DestroyWindow( child );
|
||||
}
|
||||
|
||||
static void test_SetActiveWindow(HWND hwnd)
|
||||
{
|
||||
HWND hwnd2;
|
||||
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
SetActiveWindow(0);
|
||||
SetActiveWindow(hwnd);
|
||||
ok( GetActiveWindow() == hwnd, "Failed to set focus to visible window %p\n", hwnd );
|
||||
SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
|
||||
ok( GetActiveWindow() == hwnd, "Window %p no longer active\n", hwnd );
|
||||
SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
|
||||
ShowWindow(hwnd, SW_HIDE);
|
||||
ok( GetActiveWindow() != hwnd, "Window %p is still active\n", hwnd );
|
||||
|
||||
/* trace("**testing an invisible window now\n"); */
|
||||
SetActiveWindow(hwnd);
|
||||
ok( GetActiveWindow() == hwnd, "Window %p not active\n", hwnd );
|
||||
ok( !(GetWindowLong(hwnd,GWL_STYLE) & WS_VISIBLE), "Window %p is visible\n", hwnd );
|
||||
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
|
||||
hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL);
|
||||
ok( GetActiveWindow() == hwnd2, "Window %p is not active\n", hwnd2 );
|
||||
DestroyWindow(hwnd2);
|
||||
ok( GetActiveWindow() != hwnd2, "Window %p is still active\n", hwnd2 );
|
||||
|
||||
hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL);
|
||||
ok( GetActiveWindow() == hwnd2, "Window %p is not active\n", hwnd2 );
|
||||
SetWindowPos(hwnd2,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
|
||||
ok( GetActiveWindow() == hwnd2, "Window %p no longer active (%p)\n", hwnd2, GetActiveWindow() );
|
||||
DestroyWindow(hwnd2);
|
||||
ok( GetActiveWindow() != hwnd2, "Window %p is still active\n", hwnd2 );
|
||||
}
|
||||
|
||||
static void check_wnd_state(HWND active, HWND foreground, HWND focus, HWND capture)
|
||||
{
|
||||
ok(active == GetActiveWindow(), "GetActiveWindow() = %p\n", GetActiveWindow());
|
||||
|
@ -2144,6 +2110,122 @@ static void check_wnd_state(HWND active, HWND foreground, HWND focus, HWND captu
|
|||
ok(capture == GetCapture(), "GetCapture() = %p\n", GetCapture());
|
||||
}
|
||||
|
||||
static void test_SetActiveWindow(HWND hwnd)
|
||||
{
|
||||
HWND hwnd2;
|
||||
|
||||
ShowWindow(hwnd, SW_HIDE);
|
||||
SetFocus(0);
|
||||
SetActiveWindow(0);
|
||||
check_wnd_state(0, 0, 0, 0);
|
||||
|
||||
/*trace("testing SetActiveWindow %p\n", hwnd);*/
|
||||
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
hwnd2 = SetActiveWindow(0);
|
||||
ok(hwnd2 == hwnd, "SetActiveWindow returned %p instead of %p\n", hwnd2, hwnd);
|
||||
check_wnd_state(0, 0, 0, 0);
|
||||
|
||||
hwnd2 = SetActiveWindow(hwnd);
|
||||
ok(hwnd2 == 0, "SetActiveWindow returned %p instead of 0\n", hwnd2);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
ShowWindow(hwnd, SW_HIDE);
|
||||
check_wnd_state(0, 0, 0, 0);
|
||||
|
||||
/*trace("testing SetActiveWindow on an invisible window %p\n", hwnd);*/
|
||||
SetActiveWindow(hwnd);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL);
|
||||
check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
|
||||
|
||||
DestroyWindow(hwnd2);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL);
|
||||
check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
|
||||
|
||||
SetWindowPos(hwnd2,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
|
||||
check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
|
||||
|
||||
DestroyWindow(hwnd2);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
}
|
||||
|
||||
static void test_SetForegroundWindow(HWND hwnd)
|
||||
{
|
||||
BOOL ret;
|
||||
HWND hwnd2;
|
||||
|
||||
ShowWindow(hwnd, SW_HIDE);
|
||||
SetFocus(0);
|
||||
SetActiveWindow(0);
|
||||
check_wnd_state(0, 0, 0, 0);
|
||||
|
||||
/*trace("testing SetForegroundWindow %p\n", hwnd);*/
|
||||
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
hwnd2 = SetActiveWindow(0);
|
||||
ok(hwnd2 == hwnd, "SetActiveWindow(0) returned %p instead of %p\n", hwnd2, hwnd);
|
||||
check_wnd_state(0, 0, 0, 0);
|
||||
|
||||
ret = SetForegroundWindow(hwnd);
|
||||
ok(ret, "SetForegroundWindow returned FALSE instead of TRUE\n");
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = SetForegroundWindow(0);
|
||||
ok(!ret, "SetForegroundWindow returned TRUE instead of FALSE\n");
|
||||
ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "got error %ld expected ERROR_INVALID_WINDOW_HANDLE\n", GetLastError());
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_SHOWWINDOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
ShowWindow(hwnd, SW_HIDE);
|
||||
check_wnd_state(0, 0, 0, 0);
|
||||
|
||||
/*trace("testing SetForegroundWindow on an invisible window %p\n", hwnd);*/
|
||||
ret = SetForegroundWindow(hwnd);
|
||||
ok(ret, "SetForegroundWindow returned FALSE instead of TRUE\n");
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL);
|
||||
check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
|
||||
|
||||
DestroyWindow(hwnd2);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
|
||||
hwnd2 = CreateWindowExA(0, "static", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, hwnd, 0, 0, NULL);
|
||||
check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
|
||||
|
||||
SetWindowPos(hwnd2,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_HIDEWINDOW);
|
||||
check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
|
||||
|
||||
DestroyWindow(hwnd2);
|
||||
check_wnd_state(hwnd, hwnd, hwnd, 0);
|
||||
}
|
||||
|
||||
static WNDPROC old_button_proc;
|
||||
|
||||
static LRESULT WINAPI button_hook_proc(HWND button, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||
|
@ -3794,6 +3876,7 @@ START_TEST(win)
|
|||
test_SetMenu(hwndMain);
|
||||
test_SetFocus(hwndMain);
|
||||
test_SetActiveWindow(hwndMain);
|
||||
test_SetForegroundWindow(hwndMain);
|
||||
|
||||
test_children_zorder(hwndMain);
|
||||
test_keyboard_input(hwndMain);
|
||||
|
|
|
@ -1999,26 +1999,21 @@ DECL_HANDLER(set_key_state)
|
|||
/* set the system foreground window */
|
||||
DECL_HANDLER(set_foreground_window)
|
||||
{
|
||||
struct thread *thread;
|
||||
struct msg_queue *queue = get_current_queue();
|
||||
|
||||
reply->previous = foreground_input ? foreground_input->active : 0;
|
||||
reply->send_msg_old = (reply->previous && foreground_input != queue->input);
|
||||
reply->send_msg_new = FALSE;
|
||||
|
||||
if (req->handle)
|
||||
if (is_top_level_window( req->handle ) &&
|
||||
((thread = get_window_thread( req->handle ))))
|
||||
{
|
||||
struct thread *thread;
|
||||
|
||||
if (is_top_level_window( req->handle ) &&
|
||||
((thread = get_window_thread( req->handle ))))
|
||||
{
|
||||
foreground_input = thread->queue->input;
|
||||
reply->send_msg_new = (foreground_input != queue->input);
|
||||
release_object( thread );
|
||||
}
|
||||
else set_error( STATUS_INVALID_HANDLE );
|
||||
foreground_input = thread->queue->input;
|
||||
reply->send_msg_new = (foreground_input != queue->input);
|
||||
release_object( thread );
|
||||
}
|
||||
else foreground_input = NULL;
|
||||
else set_win32_error( ERROR_INVALID_WINDOW_HANDLE );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3933,6 +3933,7 @@ static const struct
|
|||
{ "ERROR_CLASS_HAS_WINDOWS", 0xc0010000 | ERROR_CLASS_HAS_WINDOWS },
|
||||
{ "ERROR_CLIPBOARD_NOT_OPEN", 0xc0010000 | ERROR_CLIPBOARD_NOT_OPEN },
|
||||
{ "ERROR_INVALID_INDEX", 0xc0010000 | ERROR_INVALID_INDEX },
|
||||
{ "ERROR_INVALID_WINDOW_HANDLE", 0xc0010000 | ERROR_INVALID_WINDOW_HANDLE },
|
||||
{ "ERROR_SEEK", 0xc0010000 | ERROR_SEEK },
|
||||
{ "FILE_IS_A_DIRECTORY", STATUS_FILE_IS_A_DIRECTORY },
|
||||
{ "FILE_LOCK_CONFLICT", STATUS_FILE_LOCK_CONFLICT },
|
||||
|
|
|
@ -110,7 +110,7 @@ static struct window *taskman_window;
|
|||
inline static struct window *get_window( user_handle_t handle )
|
||||
{
|
||||
struct window *ret = get_user_object( handle, USER_WINDOW );
|
||||
if (!ret) set_error( STATUS_INVALID_HANDLE );
|
||||
if (!ret) set_win32_error( ERROR_INVALID_WINDOW_HANDLE );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue