comctl32/listbox: Rewrite FindString to use helpers and avoid the macro.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
2fddd6211e
commit
874c5508ee
|
@ -965,46 +965,42 @@ static INT LISTBOX_FindFileStrPos( LB_DESCR *descr, LPCWSTR str )
|
|||
*/
|
||||
static INT LISTBOX_FindString( LB_DESCR *descr, INT start, LPCWSTR str, BOOL exact )
|
||||
{
|
||||
INT i;
|
||||
LB_ITEMDATA *item;
|
||||
INT i, index;
|
||||
|
||||
if (descr->style & LBS_NODATA) return LB_ERR;
|
||||
|
||||
if (start >= descr->nb_items) start = -1;
|
||||
item = descr->items + start + 1;
|
||||
start++;
|
||||
if (start >= descr->nb_items) start = 0;
|
||||
if (HAS_STRINGS(descr))
|
||||
{
|
||||
if (!str || ! str[0] ) return LB_ERR;
|
||||
if (exact)
|
||||
{
|
||||
for (i = start + 1; i < descr->nb_items; i++, item++)
|
||||
if (!LISTBOX_lstrcmpiW( descr->locale, str, item->str )) return i;
|
||||
for (i = 0, item = descr->items; i <= start; i++, item++)
|
||||
if (!LISTBOX_lstrcmpiW( descr->locale, str, item->str )) return i;
|
||||
for (i = 0, index = start; i < descr->nb_items; i++, index++)
|
||||
{
|
||||
if (index == descr->nb_items) index = 0;
|
||||
if (!LISTBOX_lstrcmpiW(descr->locale, str, get_item_string(descr, index)))
|
||||
return index;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Special case for drives and directories: ignore prefix */
|
||||
#define CHECK_DRIVE(item) \
|
||||
if ((item)->str[0] == '[') \
|
||||
{ \
|
||||
if (!strncmpiW( str, (item)->str+1, len )) return i; \
|
||||
if (((item)->str[1] == '-') && !strncmpiW(str, (item)->str+2, len)) \
|
||||
return i; \
|
||||
}
|
||||
|
||||
/* Special case for drives and directories: ignore prefix */
|
||||
INT len = strlenW(str);
|
||||
for (i = start + 1; i < descr->nb_items; i++, item++)
|
||||
WCHAR *item_str;
|
||||
|
||||
for (i = 0, index = start; i < descr->nb_items; i++, index++)
|
||||
{
|
||||
if (!strncmpiW( str, item->str, len )) return i;
|
||||
CHECK_DRIVE(item);
|
||||
if (index == descr->nb_items) index = 0;
|
||||
item_str = get_item_string(descr, index);
|
||||
|
||||
if (!strncmpiW(str, item_str, len)) return index;
|
||||
if (item_str[0] == '[')
|
||||
{
|
||||
if (!strncmpiW(str, item_str + 1, len)) return index;
|
||||
if (item_str[1] == '-' && !strncmpiW(str, item_str + 2, len)) return index;
|
||||
}
|
||||
}
|
||||
for (i = 0, item = descr->items; i <= start; i++, item++)
|
||||
{
|
||||
if (!strncmpiW( str, item->str, len )) return i;
|
||||
CHECK_DRIVE(item);
|
||||
}
|
||||
#undef CHECK_DRIVE
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1014,10 +1010,11 @@ static INT LISTBOX_FindString( LB_DESCR *descr, INT start, LPCWSTR str, BOOL exa
|
|||
return LISTBOX_FindStringPos( descr, str, TRUE );
|
||||
|
||||
/* Otherwise use a linear search */
|
||||
for (i = start + 1; i < descr->nb_items; i++, item++)
|
||||
if (item->data == (ULONG_PTR)str) return i;
|
||||
for (i = 0, item = descr->items; i <= start; i++, item++)
|
||||
if (item->data == (ULONG_PTR)str) return i;
|
||||
for (i = 0, index = start; i < descr->nb_items; i++, index++)
|
||||
{
|
||||
if (index == descr->nb_items) index = 0;
|
||||
if (get_item_data(descr, index) == (ULONG_PTR)str) return index;
|
||||
}
|
||||
}
|
||||
return LB_ERR;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue