From: Fabian Maurer Subject: [v3 10/12] comctl32: TaskDialog - Add button return value and tests Message-Id: <20170310182204.20127-10-dark.shadow4@web.de> Date: Fri, 10 Mar 2017 19:22:02 +0100 In-Reply-To: <20170310182204.20127-1-dark.shadow4@web.de> References: <20170310182204.20127-1-dark.shadow4@web.de> v3: Rewrite to implement Nikolay Sivov's suggestions Signed-off-by: Fabian Maurer --- dlls/comctl32/taskdialog.c | 25 ++++++++++++++++++------- dlls/comctl32/tests/taskdialog.c | 13 +++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/dlls/comctl32/taskdialog.c b/dlls/comctl32/taskdialog.c index 65787c5c54..4a510eb247 100644 --- a/dlls/comctl32/taskdialog.c +++ b/dlls/comctl32/taskdialog.c @@ -256,10 +256,20 @@ static HRESULT callback(taskdialog_info *dialog_info, UINT uNotification, WPARAM return S_OK; } + static void click_button(taskdialog_info *dialog_info, WORD command_id) + { + HRESULT ret_callback; + + ret_callback = callback(dialog_info, TDN_BUTTON_CLICKED, command_id, 0); + if(ret_callback == S_OK) + { + EndDialog(dialog_info->hwnd, command_id); + } + } + static INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static const WCHAR taskdialog_info_propnameW[] = {'T','a','s','k','D','i','a','l','o','g','I','n','f','o',0}; - HRESULT ret_callback; taskdialog_info *dialog_info; if(uMsg != WM_INITDIALOG && uMsg != WM_NCDESTROY) @@ -296,12 +306,7 @@ static INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARA if(HIWORD(wParam) == BN_CLICKED) { WORD command_id = LOWORD(wParam); - - ret_callback = callback(dialog_info, TDN_BUTTON_CLICKED, command_id, 0); - if(ret_callback == S_OK) /* FIXME */ - { - EndDialog(hwndDlg, command_id); - } + click_button(dialog_info, command_id); return TRUE; } break; @@ -309,6 +314,12 @@ static INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARA callback(dialog_info, TDN_DESTROYED, 0, 0); RemovePropW(hwndDlg, taskdialog_info_propnameW); break; + + /* Custom messages*/ + + case TDM_CLICK_BUTTON: + click_button(dialog_info, wParam); + break; } return FALSE; } diff --git a/dlls/comctl32/tests/taskdialog.c b/dlls/comctl32/tests/taskdialog.c index 51a6451721..f76624c45d 100644 --- a/dlls/comctl32/tests/taskdialog.c +++ b/dlls/comctl32/tests/taskdialog.c @@ -72,6 +72,18 @@ static const struct message_info mes_simple_show[] = { { 0 } }; +static const struct message_info mes_cancel_button_press[] = { + { TDN_CREATED, 0, 0, S_OK, { + { TDM_CLICK_BUTTON, IDOK, 0, TRUE }, + { TDM_CLICK_BUTTON, IDOK, 0, TRUE }, + { TDM_CLICK_BUTTON, IDOK, 0, TRUE }, + { 0 }}}, + { TDN_BUTTON_CLICKED, IDOK, 0, S_FALSE, {{ 0 }}}, + { TDN_BUTTON_CLICKED, IDOK, 0, 0xFF, {{ 0 }}}, /* Random return value tested here */ + { TDN_BUTTON_CLICKED, IDOK, 0, S_OK, {{ 0 }}}, + { 0 } +}; + /* Create a message to test against */ static struct message create_test_message(UINT message, WPARAM wParam, LPARAM lParam) @@ -210,6 +222,7 @@ static void test_TaskDialogIndirect(void) info.lpCallbackData = backup_ref_data = 0x12345678; /* Set data for callback tests */ run_test(&info, IDOK, 0, FALSE, mes_simple_show, "Simple test with parameters null"); + run_test(&info, IDOK, 0, FALSE, mes_cancel_button_press, "Simple test for cancelling button press"); } START_TEST(taskdialog) -- 2.12.0