From c46a5141da0de48cb52c61a952d596a8736020b3 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Sun, 24 May 2009 22:36:14 +0400 Subject: [PATCH] comctl32/listview: Draw focus rectangle only when visible. --- dlls/comctl32/listview.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 8ddaf3d405a..75ce29145d9 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -4305,6 +4305,7 @@ static void LISTVIEW_Refresh(LISTVIEW_INFO *infoPtr, HDC hdc, const RECT *prcEra ITERATOR i; HDC hdcOrig = hdc; HBITMAP hbmp = NULL; + RANGE range; LISTVIEW_DUMP(infoPtr); @@ -4370,11 +4371,11 @@ static void LISTVIEW_Refresh(LISTVIEW_INFO *infoPtr, HDC hdc, const RECT *prcEra /* figure out what we need to draw */ iterator_visibleitems(&i, infoPtr, hdc); - + range = iterator_range(&i); + /* send cache hint notification */ if (infoPtr->dwStyle & LVS_OWNERDATA) { - RANGE range = iterator_range(&i); NMLVCACHEHINT nmlv; ZeroMemory(&nmlv, sizeof(NMLVCACHEHINT)); @@ -4392,8 +4393,9 @@ static void LISTVIEW_Refresh(LISTVIEW_INFO *infoPtr, HDC hdc, const RECT *prcEra else /* LVS_LIST, LVS_ICON or LVS_SMALLICON */ LISTVIEW_RefreshList(infoPtr, &i, hdc, cdmode); - /* if we have a focus rect, draw it */ - if (infoPtr->bFocus) + /* if we have a focus rect and it's visible, draw it */ + if (infoPtr->bFocus && range.lower <= infoPtr->nFocusedItem && + (range.upper - 1) >= infoPtr->nFocusedItem) LISTVIEW_DrawFocusRect(infoPtr, hdc); } iterator_destroy(&i);