The patch approximates the behaviour observed in the message tests but still doesn't make the message tests pass without failures.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/user32/dialog.c | 12 ++++++++++-- dlls/user32/tests/msg.c | 7 ------- 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c index c5c646e0b1..c47bd571ae 100644 --- a/dlls/user32/dialog.c +++ b/dlls/user32/dialog.c @@ -1237,8 +1237,16 @@ BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg ) if (!(dlgCode & DLGC_WANTARROWS)) { BOOL fPrevious = (msg->wParam == VK_LEFT || msg->wParam == VK_UP); - HWND hwndNext = GetNextDlgGroupItem (hwndDlg, GetFocus(), fPrevious ); - SendMessageW( hwndDlg, WM_NEXTDLGCTL, (WPARAM)hwndNext, 1 ); + HWND hwndNext = GetNextDlgGroupItem( hwndDlg, msg->hwnd, fPrevious ); + if (hwndNext && SendMessageW( hwndNext, WM_GETDLGCODE, msg->wParam, (LPARAM)msg ) == (DLGC_BUTTON | DLGC_RADIOBUTTON)) + { + SetFocus( hwndNext ); + if ((GetWindowLongW( hwndNext, GWL_STYLE ) & BS_TYPEMASK) == BS_AUTORADIOBUTTON && + SendMessageW( hwndNext, BM_GETCHECK, 0, 0 ) != BST_CHECKED) + SendMessageW( hwndNext, BM_CLICK, 1, 0 ); + } + else + SendMessageW( hwndDlg, WM_NEXTDLGCTL, (WPARAM)hwndNext, 1 ); return TRUE; } break; diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 6e62873023..f78858f4d4 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -7057,11 +7057,9 @@ if (0) /* actual message sequence is different on every run in some Windows setu while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); ok_sequence(auto_radio_button_VK_DOWN_dialog, "IsDialogMessage(VK_DOWN)", TRUE);
-todo_wine test_radio(radio1, 1, radio2, 0, radio3, 0);
hwnd = GetFocus(); -todo_wine ok(hwnd == radio1, "focus should be on radio1, not on %p\n", hwnd); GetWindowRect(radio1, &rc);
@@ -7076,11 +7074,9 @@ todo_wine while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); ok_sequence(auto_radio_button_VK_DOWN_radio3, "down to radio3", TRUE);
-todo_wine test_radio(radio1, 1, radio2, 0, radio3, 0);
hwnd = GetFocus(); -todo_wine ok(hwnd == radio1, "focus should be on radio1, not on %p\n", hwnd);
flush_events(); @@ -7097,11 +7093,9 @@ todo_wine while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); ok_sequence(auto_radio_button_VK_UP_radio1, "up to radio1", TRUE);
-todo_wine test_radio(radio1, 1, radio2, 0, radio3, 0);
hwnd = GetFocus(); -todo_wine ok(hwnd == radio1, "focus should be on radio1, not on %p\n", hwnd);
flush_events(); @@ -7119,7 +7113,6 @@ todo_wine if (0) /* actual message sequence is different on every run in some Windows setups */ ok_sequence(auto_radio_button_VK_UP_dialog, "IsDialogMessage(VK_UP) #3", FALSE); /* what really matters is that nothing has changed */ -todo_wine test_radio(radio1, 1, radio2, 0, radio3, 0);
log_all_parent_messages--;
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=45073
Your paranoid android.
=== wvistau64_zh_CN (32 bit report) ===
user32: msg.c:5132: Test failed: ShowWindow(SW_SHOWMAXIMIZED):overlapped: 37: the msg sequence is not complete: expected 0000 - actual 0088