[PATCH] comctl32/taskdialog: Implement nDefaultButton and add tests

Nikolay Sivov bunglehead at gmail.com
Sun Nov 5 05:51:11 CST 2017


On 05.11.2017 14:17, Fabian Maurer wrote:
>> We already iterate over custom buttons and check every common button
>> flag before this point, so it shouldn't be necessary to have another loop.
> 
> I'm open to suggestion, but how would you do that?
> 
> We could add three checks each time before taskdialog_init_button is called, 
> or alternatively one check in taskdialog_init_button. Like giving it a pointer 
> to default_button, and checking if the id equal the taskdialog default button.
> But I find my current solution to be cleaner to be honest, what's your 
> suggestion?

Yes, something like that. taskdialog_init_button() has all the info to
do that.

> 
>>
>>> @@ -583,7 +592,7 @@ HRESULT WINAPI TaskDialogIndirect(const
>>> TASKDIALOGCONFIG *taskconfig, int *butto> 
>>>      Free(template);
>>>      
>>>      if (button) *button = ret;
>>>
>>> -    if (radio_button) *radio_button = taskconfig->nDefaultButton;
>>> +    if (radio_button) *radio_button = FALSE;
>>>
>>>      if (verification_flag_checked) *verification_flag_checked = TRUE;
>>
>> Same as with verification flag, we don't implement radio buttons
>> currently so it's better to leave it as is to avoid possible regressions
>> until we add support for them. Also you're supposed to return button id,
>> not binary flags.
> 
> Yes, it should be 0 instead of FALSE. But the way it is, returning 
> "taskconfig->nDefaultButton", that's obviously wrong. The tests show it has to 
> be 0, and even if we implement it, the result when not setting radio buttons 
> won't change, right?

It is wrong now, but it's been like that for a while, I don't want to
risk that.

> 
>>> +static TASKDIALOG_BUTTON* buttons_make(void)
>>> +{
>>> +    static const WCHAR str_format[] = {'%','0','2','d',0};
>>> +    static TASKDIALOG_BUTTON buttons[TEST_NUM_BUTTONS];
>>> +    static WCHAR titles[TEST_NUM_BUTTONS * 3]; /* Each button has two
>>> digits as title, plus null-terminator */ +    int i;
>>> +
>>> +    for (i = 0; i < TEST_NUM_BUTTONS; i++)
>>> +    {
>>> +        WCHAR *text = &titles[i * 3];
>>> +        wsprintfW(text, str_format, i);
>>> +
>>> +        buttons[i].pszButtonText = text;
>>> +        buttons[i].nButtonID = ID_START_BUTTON + i;
>>> +    }
>>> +    return buttons;
>>> +}
>>> +
>>
>> Please merge this to test function.
> 
> Wouldn't it make sense to leave it separate? It might be used in another test 
> function. It also nicely encapsulates the static variables, that was the 
> primary reason I put it into its own function.

I don't think it makes sense to have it separated, not in a way it's
done currently.

> 
> Regards,
> Fabian Maurer
> 




More information about the wine-devel mailing list