comctl32: Fix listview redraw when deleting items.

This commit is contained in:
Lei Zhang 2008-03-19 17:49:50 -07:00 committed by Alexandre Julliard
parent 74f2f09295
commit 03f18eb425
1 changed files with 6 additions and 4 deletions

View File

@ -4642,8 +4642,9 @@ static void LISTVIEW_ScrollOnInsert(LISTVIEW_INFO *infoPtr, INT nItem, INT dir)
*/ */
static BOOL LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem) static BOOL LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem)
{ {
UINT uView = infoPtr->dwStyle & LVS_TYPEMASK;
LVITEMW item; LVITEMW item;
const UINT uView = infoPtr->dwStyle & LVS_TYPEMASK;
const BOOL is_icon = (uView == LVS_SMALLICON || uView == LVS_ICON);
TRACE("(nItem=%d)\n", nItem); TRACE("(nItem=%d)\n", nItem);
@ -4658,7 +4659,7 @@ static BOOL LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem)
if (!notify_deleteitem(infoPtr, nItem)) return FALSE; if (!notify_deleteitem(infoPtr, nItem)) return FALSE;
/* we need to do this here, because we'll be deleting stuff */ /* we need to do this here, because we'll be deleting stuff */
if (uView == LVS_SMALLICON || uView == LVS_ICON) if (is_icon)
LISTVIEW_InvalidateItem(infoPtr, nItem); LISTVIEW_InvalidateItem(infoPtr, nItem);
if (!(infoPtr->dwStyle & LVS_OWNERDATA)) if (!(infoPtr->dwStyle & LVS_OWNERDATA))
@ -4677,7 +4678,7 @@ static BOOL LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem)
DPA_Destroy(hdpaSubItems); DPA_Destroy(hdpaSubItems);
} }
if (uView == LVS_SMALLICON || uView == LVS_ICON) if (is_icon)
{ {
DPA_DeletePtr(infoPtr->hdpaPosX, nItem); DPA_DeletePtr(infoPtr->hdpaPosX, nItem);
DPA_DeletePtr(infoPtr->hdpaPosY, nItem); DPA_DeletePtr(infoPtr->hdpaPosY, nItem);
@ -4687,7 +4688,8 @@ static BOOL LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem)
LISTVIEW_ShiftIndices(infoPtr, nItem, -1); LISTVIEW_ShiftIndices(infoPtr, nItem, -1);
/* now is the invalidation fun */ /* now is the invalidation fun */
LISTVIEW_ScrollOnInsert(infoPtr, nItem, -1); if (!is_icon)
LISTVIEW_ScrollOnInsert(infoPtr, nItem, -1);
return TRUE; return TRUE;
} }