[PATCH v3 3/4] comctl32/listbox: Implement LBS_NODATA for single-selection listboxes
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Feb 18 07:20:43 CST 2019
On 2/18/19 2:34 PM, Gabriel Ivăncescu wrote:
> On 2/18/19 2:19 PM, Nikolay Sivov wrote:
>> On 2/18/19 3:09 PM, Gabriel Ivăncescu wrote:
>>
>>> +static BOOL is_singlesel_NODATA(const LB_DESCR *descr)
>>> +{
>>> + return (descr->style & (LBS_NODATA | LBS_MULTIPLESEL |
>>> LBS_EXTENDEDSEL)) == LBS_NODATA;
>>> +}
>>> +
>>> +static BOOL is_multisel_NODATA(const LB_DESCR *descr)
>>> +{
>>> + return (descr->style & LBS_NODATA) && (descr->style &
>>> (LBS_MULTIPLESEL | LBS_EXTENDEDSEL));
>>> +}
>>> +
>>
>> This has to be consistent with existing IS_MULTISELECT(), both for
>> naming and usage throughout the code.
>>
>> Could the same be achieved with IS_MULTISELECT() and direct style
>> check for LBS_NODATA?
>>
>> Shortcuts with is_singlesel_NODATA() also seem avoidable, if we don't
>> need to allocate anything in this case, can we just check for
>> descr->items != NULL?
>>
>> That's basically what I was trying to suggest since first version of
>> such helpers appeared.
>>
>>
>>
>
> Hi Nikolay,
>
> So you want me to use a macro? Or just all-caps naming? Or all lowercase?
>
> And we can't check for descr->items != NULL since it's used in places
> where it can be NULL, in this case for normal listbox it will allocate
> the space (e.g. resize_storage).
>
> I think I had it with manual checks originally but was told to move it
> into a helper.
Ok so, I will turn them to inline functions in all-caps naming, i.e.
IS_SINGLESEL_NODATA and IS_MULTISEL_NODATA instead of macros.
IS_MULTISELECT checks for LBS_NOSEL, which I want to avoid (the usage of
them is based on the storage of items, so I don't think that should
factor into it), so I will keep the actual functions as they are now.
And in insert_item_data and remove_item_data I will replace with check
for NULL because it works there.
Does that sound reasonable?
More information about the wine-devel
mailing list