[PATCH 2/2] user32/listbox: Optimize SetCount partly
Huw Davies
huw at codeweavers.com
Wed Sep 19 02:46:03 CDT 2018
On Tue, Sep 18, 2018 at 11:15:58PM +0300, Gabriel Ivăncescu wrote:
> Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
> ---
> dlls/user32/listbox.c | 23 ++++++++++++++++++-----
> 1 file changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/dlls/user32/listbox.c b/dlls/user32/listbox.c
> index c8bd148..a8de8d3 100644
> --- a/dlls/user32/listbox.c
> +++ b/dlls/user32/listbox.c
> @@ -1763,18 +1763,31 @@ static LRESULT LISTBOX_SetCount( LB_DESCR *descr, INT count )
> return LB_ERR;
> }
>
> - /* FIXME: this is far from optimal... */
> if (count > descr->nb_items)
> {
> - while (count > descr->nb_items)
> - if ((ret = LISTBOX_InsertString( descr, -1, 0 )) < 0)
> - return ret;
> + INT num = descr->nb_items;
> + if ((ret = LISTBOX_InitStorage(descr, count - num)) != LB_OKAY)
> + return ret;
> + memset(&descr->items[num], 0, (count - num) * sizeof(*descr->items));
> + descr->nb_items = count;
> +
> + LISTBOX_UpdateScroll(descr);
> + LISTBOX_InvalidateItems(descr, num);
> +
> + /* If listbox was empty, set focus to the first item */
> + if (count == 1) LISTBOX_SetCaretIndex(descr, 0, FALSE);
Shouldn't this be if (num == 0) ? That would at least match the comment.
Huw.
More information about the wine-devel
mailing list