Module: wine Branch: stable Commit: f946ccfddb3fbeebfa6684b87359d846df76eea6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f946ccfddb3fbeebfa6684b873...
Author: Vladimir Panteleev vladimir@thecybershadow.net Date: Tue Sep 14 16:46:55 2010 +0300
user32: Fix VK_RETURN handling in IsDialogMessage for dialogs without an IDOK. (cherry picked from commit 592d994f0077c19dc9fa2db988f70d5d4c2a9cdb)
---
dlls/user32/dialog.c | 6 ++---- dlls/user32/tests/dialog.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c index aac8a4d..052fbff 100644 --- a/dlls/user32/dialog.c +++ b/dlls/user32/dialog.c @@ -1221,10 +1221,8 @@ 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)); - if (!hwndDef || !IsWindowEnabled(hwndDef)) - return TRUE; - SendMessageW( hwndDlg, WM_COMMAND, MAKEWPARAM( LOWORD(dw), BN_CLICKED ), - (LPARAM)GetDlgItem(hwndDlg, LOWORD(dw))); + if (hwndDef ? IsWindowEnabled(hwndDef) : LOWORD(dw)==IDOK) + SendMessageW( hwndDlg, WM_COMMAND, MAKEWPARAM( LOWORD(dw), BN_CLICKED ), (LPARAM)hwndDef); } else { diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c index b7727da..736c99d 100644 --- a/dlls/user32/tests/dialog.c +++ b/dlls/user32/tests/dialog.c @@ -1000,6 +1000,28 @@ static INT_PTR CALLBACK TestDefButtonDlgProc (HWND hDlg, UINT uiMsg, return FALSE; }
+static INT_PTR CALLBACK TestReturnKeyDlgProc (HWND hDlg, UINT uiMsg, + WPARAM wParam, LPARAM lParam) +{ + static int received_idok = 0; + switch (uiMsg) + { + case WM_INITDIALOG: + { + MSG msg = {hDlg, WM_KEYDOWN, VK_RETURN, 0x011c0001}; + IsDialogMessage(hDlg, &msg); + } + ok(received_idok, "WM_COMMAND not received\n"); + EndDialog(hDlg, 0); + return TRUE; + case WM_COMMAND: + ok(wParam==IDOK, "Expected IDOK\n"); + received_idok = 1; + return TRUE; + } + return FALSE; +} + static void test_DialogBoxParamA(void) { INT_PTR ret; @@ -1044,6 +1066,8 @@ static void test_DialogBoxParamA(void)
ret = DialogBoxParamA(GetModuleHandle(NULL), "TEST_EMPTY_DIALOG", 0, TestDefButtonDlgProc, 0); ok(ret == IDOK, "Expected IDOK\n"); + + DialogBoxParamA(GetModuleHandle(NULL), "TEST_EMPTY_DIALOG", 0, TestReturnKeyDlgProc, 0); }
static void test_DisabledDialogTest(void)