user32: Update last active popup for all parents.

oldstable
Vladimir Panteleev 2010-10-16 20:22:58 +03:00 committed by Alexandre Julliard
parent 971e9a2239
commit 824c5089d2
2 changed files with 30 additions and 3 deletions

View File

@ -6256,6 +6256,28 @@ todo_wine
ok( found != NULL, "found is NULL, expected a valid hwnd\n" );
}
static void test_GetLastActivePopup(void)
{
HWND hwndOwner, hwndPopup1, hwndPopup2;
hwndOwner = CreateWindowExA(0, "MainWindowClass", NULL,
WS_VISIBLE | WS_POPUPWINDOW,
100, 100, 200, 200,
NULL, 0, GetModuleHandle(0), NULL);
hwndPopup1 = CreateWindowExA(0, "MainWindowClass", NULL,
WS_VISIBLE | WS_POPUPWINDOW,
100, 100, 200, 200,
hwndOwner, 0, GetModuleHandle(0), NULL);
hwndPopup2 = CreateWindowExA(0, "MainWindowClass", NULL,
WS_VISIBLE | WS_POPUPWINDOW,
100, 100, 200, 200,
hwndPopup1, 0, GetModuleHandle(0), NULL);
ok( GetLastActivePopup(hwndOwner) == hwndPopup2, "wrong last active popup\n" );
DestroyWindow( hwndPopup2 );
DestroyWindow( hwndPopup1 );
DestroyWindow( hwndOwner );
}
START_TEST(win)
{
HMODULE user32 = GetModuleHandleA( "user32.dll" );
@ -6329,6 +6351,7 @@ START_TEST(win)
test_children_zorder(hwndMain);
test_popup_zorder(hwndMain2, hwndMain, WS_POPUP);
test_popup_zorder(hwndMain2, hwndMain, 0);
test_GetLastActivePopup();
test_keyboard_input(hwndMain);
test_mouse_input(hwndMain);
test_validatergn(hwndMain);

View File

@ -569,9 +569,13 @@ int make_window_active( user_handle_t window )
if (!win) return 0;
/* set last active for window and its owner */
win->last_active = win->handle;
if ((owner = get_user_object( win->owner, USER_WINDOW ))) owner->last_active = win->handle;
/* set last active for window and its owners */
owner = win;
while (owner)
{
owner->last_active = win->handle;
owner = get_user_object( owner->owner, USER_WINDOW );
}
return 1;
}