comctl32/listbox: Scroll to specified caret index.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Nikolay Sivov 2019-12-11 15:17:51 +03:00 committed by Alexandre Julliard
parent 832b748b06
commit 1a25f47d59
1 changed files with 10 additions and 6 deletions

View File

@ -1462,19 +1462,23 @@ static void LISTBOX_MakeItemVisible( LB_DESCR *descr, INT index, BOOL fully )
*/
static LRESULT LISTBOX_SetCaretIndex( LB_DESCR *descr, INT index, BOOL fully_visible )
{
INT oldfocus = descr->focus_item;
BOOL focus_changed = descr->focus_item != index;
TRACE("old focus %d, index %d\n", oldfocus, index);
TRACE("old focus %d, index %d\n", descr->focus_item, index);
if (descr->style & LBS_NOSEL) return LB_ERR;
if ((index < 0) || (index >= descr->nb_items)) return LB_ERR;
if (index == oldfocus) return LB_OKAY;
LISTBOX_DrawFocusRect( descr, FALSE );
descr->focus_item = index;
if (focus_changed)
{
LISTBOX_DrawFocusRect( descr, FALSE );
descr->focus_item = index;
}
LISTBOX_MakeItemVisible( descr, index, fully_visible );
LISTBOX_DrawFocusRect( descr, TRUE );
if (focus_changed)
LISTBOX_DrawFocusRect( descr, TRUE );
return LB_OKAY;
}