From 6ee4a87ad6958dc2e00fff646a3bb2b50d188977 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 2 Mar 2010 11:51:52 +0100 Subject: [PATCH] user32: Also show dialogs right after a WM_TIMER message. --- dlls/user32/dialog.c | 6 +++++ dlls/user32/tests/dialog.c | 50 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c index 325d6e287d..79f5182c78 100644 --- a/dlls/user32/dialog.c +++ b/dlls/user32/dialog.c @@ -815,6 +815,12 @@ INT DIALOG_DoDialogBox( HWND hwnd, HWND owner ) DispatchMessageW( &msg ); } if (dlgInfo->flags & DF_END) break; + + if (bFirstEmpty && msg.message == WM_TIMER) + { + ShowWindow( hwnd, SW_SHOWNORMAL ); + bFirstEmpty = FALSE; + } } } if (dlgInfo->flags & DF_OWNERENABLED) DIALOG_EnableOwner( owner ); diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c index ef4d5dce69..1b36c5368c 100644 --- a/dlls/user32/tests/dialog.c +++ b/dlls/user32/tests/dialog.c @@ -1157,6 +1157,55 @@ static void test_SaveRestoreFocus(void) DestroyWindow(hDlg); } +static INT_PTR CALLBACK timer_message_dlg_proc(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + static int count; + BOOL visible; + + switch (msg) + { + case WM_INITDIALOG: + visible = GetWindowLong(wnd, GWL_STYLE) & WS_VISIBLE; + ok(!visible, "Dialog should not be visible.\n"); + SetTimer(wnd, 1, 100, NULL); + Sleep(200); + return FALSE; + + case WM_COMMAND: + if (LOWORD(wparam) != IDCANCEL) return FALSE; + EndDialog(wnd, LOWORD(wparam)); + return TRUE; + + case WM_TIMER: + if (wparam != 1) return FALSE; + visible = GetWindowLong(wnd, GWL_STYLE) & WS_VISIBLE; + if (!count++) + { + ok(!visible, "Dialog should not be visible.\n"); + PostMessage(wnd, WM_USER, 0, 0); + } + else + { + ok(visible, "Dialog should be visible.\n"); + PostMessage(wnd, WM_COMMAND, IDCANCEL, 0); + } + return TRUE; + + case WM_USER: + visible = GetWindowLong(wnd, GWL_STYLE) & WS_VISIBLE; + ok(visible, "Dialog should be visible.\n"); + return TRUE; + + default: + return FALSE; + } +} + +static void test_timer_message(void) +{ + DialogBoxA(g_hinst, "RADIO_TEST_DIALOG", NULL, timer_message_dlg_proc); +} + START_TEST(dialog) { g_hinst = GetModuleHandleA (0); @@ -1172,4 +1221,5 @@ START_TEST(dialog) test_DisabledDialogTest(); test_MessageBoxFontTest(); test_SaveRestoreFocus(); + test_timer_message(); } -- 2.33.8