user32: Fix for finding nested default buttons.

This commit is contained in:
André Hentschel 2011-07-26 20:39:28 +02:00 committed by Alexandre Julliard
parent 327eb31325
commit a355121414
3 changed files with 34 additions and 3 deletions

View File

@ -502,7 +502,6 @@ static void test_custom_default_button(void)
}
}
todo_wine
ok(add_button_has_been_pressed, "The Add button has not been pressed!\n");
DestroyWindow(hdlg);

View File

@ -1119,6 +1119,38 @@ static void DIALOG_FixChildrenOnChangeFocus (HWND hwndDlg, HWND hwndNext)
}
}
/***********************************************************************
* DIALOG_IdToHwnd
*
* A recursive version of GetDlgItem
*
* RETURNS
* The HWND for a Child ID.
*/
static HWND DIALOG_IdToHwnd( HWND hwndDlg, INT id )
{
int i;
HWND *list = WIN_ListChildren( hwndDlg );
HWND ret = 0;
if (!list) return 0;
for (i = 0; list[i]; i++)
{
if (GetWindowLongPtrW( list[i], GWLP_ID ) == id)
{
ret = list[i];
break;
}
/* Recurse into every child */
if ((ret = DIALOG_IdToHwnd( list[i], id ))) break;
}
HeapFree( GetProcessHeap(), 0, list );
return ret;
}
/***********************************************************************
* IsDialogMessageW (USER32.@)
*/
@ -1227,7 +1259,7 @@ BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg )
}
else if (DC_HASDEFID == HIWORD(dw = SendMessageW (hwndDlg, DM_GETDEFID, 0, 0)))
{
HWND hwndDef = GetDlgItem(hwndDlg, LOWORD(dw));
HWND hwndDef = DIALOG_IdToHwnd(hwndDlg, LOWORD(dw));
if (hwndDef ? IsWindowEnabled(hwndDef) : LOWORD(dw)==IDOK)
SendMessageW( hwndDlg, WM_COMMAND, MAKEWPARAM( LOWORD(dw), BN_CLICKED ), (LPARAM)hwndDef);
}

View File

@ -709,7 +709,7 @@ static void test_WM_NEXTDLGCTL(void)
g_bReceivedCommand = FALSE;
FormEnterMsg (&msg, child3);
ok(IsDialogMessage (g_hwndTestDlg, &msg), "Did not handle the ENTER\n");
todo_wine ok(g_bReceivedCommand, "Did not trigger the default Button action\n");
ok(g_bReceivedCommand, "Did not trigger the default Button action\n");
DestroyWindow(child3);
DestroyWindow(child2);