user32: Fix the return value of EnumThreadWindows.

This commit is contained in:
Alexandre Julliard 2009-10-23 14:46:58 +02:00
parent a04c6db804
commit 1b27890af6
2 changed files with 58 additions and 2 deletions

View File

@ -569,6 +569,60 @@ static void test_parent_owner(void)
DestroyWindow( owner );
}
static BOOL CALLBACK enum_proc( HWND hwnd, LPARAM lParam)
{
(*(LPINT)lParam)++;
if (*(LPINT)lParam > 2) return FALSE;
return TRUE;
}
static DWORD CALLBACK enum_thread( void *arg )
{
INT count;
HWND hwnd[3];
BOOL ret;
MSG msg;
PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ); /* make sure we have a message queue */
count = 0;
ret = EnumThreadWindows( GetCurrentThreadId(), enum_proc, (LPARAM)&count );
ok( ret, "EnumThreadWindows should have returned TRUE\n" );
ok( count == 0, "count should be 0 got %d\n", count );
hwnd[0] = CreateWindowExA(0, "ToolWindowClass", "Tool window 1", WS_POPUP,
0, 0, 100, 100, 0, 0, 0, NULL );
count = 0;
ret = EnumThreadWindows( GetCurrentThreadId(), enum_proc, (LPARAM)&count );
ok( ret, "EnumThreadWindows should have returned TRUE\n" );
if (count != 2) /* Vista gives us two windows for the price of one */
{
ok( count == 1, "count should be 1 got %d\n", count );
hwnd[2] = CreateWindowExA(0, "ToolWindowClass", "Tool window 2", WS_POPUP,
0, 0, 100, 100, 0, 0, 0, NULL );
}
else hwnd[2] = 0;
hwnd[1] = CreateWindowExA(0, "ToolWindowClass", "Tool window 3", WS_POPUP,
0, 0, 100, 100, 0, 0, 0, NULL );
count = 0;
ret = EnumThreadWindows( GetCurrentThreadId(), enum_proc, (LPARAM)&count );
ok( !ret, "EnumThreadWindows should have returned FALSE\n" );
ok( count == 3, "count should be 1 got %d\n", count );
if (hwnd[2]) DestroyWindow(hwnd[2]);
DestroyWindow(hwnd[1]);
DestroyWindow(hwnd[0]);
return 0;
}
/* test EnumThreadWindows in a separate thread */
static void test_enum_thread_windows(void)
{
DWORD id;
HANDLE handle = CreateThread( NULL, 0, enum_thread, 0, 0, &id );
ok( !WaitForSingleObject( handle, 10000 ), "wait failed\n" );
CloseHandle( handle );
}
static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
@ -5762,6 +5816,7 @@ START_TEST(win)
test_CreateWindow();
test_parent_owner();
test_SetParent();
test_enum_thread_windows();
test_mdi();
test_icons();

View File

@ -3151,6 +3151,7 @@ BOOL WINAPI EnumThreadWindows( DWORD id, WNDENUMPROC func, LPARAM lParam )
{
HWND *list;
int i;
BOOL ret = TRUE;
USER_CheckNotLock();
@ -3159,9 +3160,9 @@ BOOL WINAPI EnumThreadWindows( DWORD id, WNDENUMPROC func, LPARAM lParam )
/* Now call the callback function for every window */
for (i = 0; list[i]; i++)
if (!func( list[i], lParam )) break;
if (!(ret = func( list[i], lParam ))) break;
HeapFree( GetProcessHeap(), 0, list );
return TRUE;
return ret;
}