On 10.03.2017 21:21, Fabian Maurer wrote:
v3: Rewrite to implement Nikolay Sivov's suggestions
Signed-off-by: Fabian Maurer dark.shadow4@web.de
dlls/comctl32/taskdialog.c | 29 +++++++++++++++++++++++-- dlls/comctl32/tests/taskdialog.c | 46 +++++++++++++++++++++++++++++++++------- 2 files changed, 65 insertions(+), 10 deletions(-)
diff --git a/dlls/comctl32/taskdialog.c b/dlls/comctl32/taskdialog.c index 2166ce1898..c5f410716e 100644 --- a/dlls/comctl32/taskdialog.c +++ b/dlls/comctl32/taskdialog.c @@ -147,17 +147,41 @@ static void controls_add(struct list *controls, WORD id, const WCHAR *class, con list_add_tail(controls, &data->entry); }
+/* FIXME: Make thread safe */ +static const TASKDIALOGCONFIG *task_config = 0; +static HRESULT callback(HWND hwnd, UINT uNotification, WPARAM wParam, LPARAM lParam) +{
- if(task_config->pfCallback)
 return task_config->pfCallback(hwnd, uNotification, wParam, lParam, task_config->lpCallbackData);- return S_OK;
 +}
There's no reason to introduce global variable for that, just to remove it two patches after.
static INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- HRESULT ret_callback;
 - switch (uMsg) {
 case WM_INITDIALOG:callback(hwndDlg, TDN_DIALOG_CONSTRUCTED, 0, 0);callback(hwndDlg, TDN_CREATED, 0, 0);return TRUE; case WM_COMMAND:
if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDOK)
if(HIWORD(wParam) == BN_CLICKED) {
EndDialog(hwndDlg, 0);
WORD command_id = LOWORD(wParam);ret_callback = callback(hwndDlg, TDN_BUTTON_CLICKED, command_id, 0);if(ret_callback == S_OK) /* FIXME */{EndDialog(hwndDlg, command_id);} return TRUE; } break;case WM_DESTROY:callback(hwndDlg, TDN_DESTROYED, 0, 0); } return FALSE;break;
For minimal working replacement of MessageBox callback support is not needed, right?