ChangeLog Use InvalidateItem instead of explicit InvalidateRect it is cleaner, and faster when redraw is disabled. --- dlls/comctl32/listview.c.W9 Wed Oct 23 14:23:27 2002 +++ dlls/comctl32/listview.c Wed Oct 23 14:31:25 2002 @@ -1192,7 +1192,6 @@ LISTVIEW_InvalidateRect(infoPtr, NULL); } - static inline void LISTVIEW_InvalidateColumn(LISTVIEW_INFO *infoPtr, INT nColumn) { RECT rcCol; @@ -2009,8 +2008,7 @@ */ static BOOL LISTVIEW_MoveIconTo(LISTVIEW_INFO *infoPtr, INT nItem, LPPOINT lppt, BOOL isNew) { - POINT Origin, old; - RECT rcItem; + POINT old; if (!isNew) { @@ -2018,6 +2016,7 @@ old.y = (LONG)DPA_GetPtr(infoPtr->hdpaPosY, nItem); if (lppt->x == old.x && lppt->y == old.y) return TRUE; + LISTVIEW_InvalidateItem(infoPtr, nItem); } /* Allocating a POINTER for every item is too resource intensive, @@ -2025,21 +2024,7 @@ if (!DPA_SetPtr(infoPtr->hdpaPosX, nItem, (void *)lppt->x)) return FALSE; if (!DPA_SetPtr(infoPtr->hdpaPosY, nItem, (void *)lppt->y)) return FALSE; - LISTVIEW_GetOrigin(infoPtr, &Origin); - if (!isNew) - { - rcItem.left = old.x + Origin.x; - rcItem.top = old.y + Origin.y; - rcItem.right = rcItem.left + infoPtr->nItemWidth; - rcItem.bottom = rcItem.top + infoPtr->nItemHeight; - LISTVIEW_InvalidateRect(infoPtr, &rcItem); - } - - rcItem.left = lppt->x + Origin.x; - rcItem.top = lppt->y + Origin.y; - rcItem.right = rcItem.left + infoPtr->nItemWidth; - rcItem.bottom = rcItem.top + infoPtr->nItemHeight; - LISTVIEW_InvalidateRect(infoPtr, &rcItem); + LISTVIEW_InvalidateItem(infoPtr, nItem); return TRUE; } @@ -4124,7 +4109,6 @@ UINT uView = infoPtr->dwStyle & LVS_TYPEMASK; NMLISTVIEW nmlv; LVITEMW item; - RECT rcBox; TRACE("(nItem=%d)\n", nItem); @@ -4134,16 +4118,16 @@ item.state = 0; item.stateMask = LVIS_SELECTED | LVIS_FOCUSED; LISTVIEW_SetItemState(infoPtr, nItem, &item); - - /* we need to do this here, because we'll be deleting stuff */ - if (uView == LVS_SMALLICON || uView == LVS_ICON) - LISTVIEW_GetItemBox(infoPtr, nItem, &rcBox); /* send LVN_DELETEITEM notification. */ ZeroMemory(&nmlv, sizeof (NMLISTVIEW)); nmlv.iItem = nItem; notify_listview(infoPtr, LVN_DELETEITEM, &nmlv); + /* we need to do this here, because we'll be deleting stuff */ + if (uView == LVS_SMALLICON || uView == LVS_ICON) + LISTVIEW_InvalidateItem(infoPtr, nItem); + if (!(infoPtr->dwStyle & LVS_OWNERDATA)) { HDPA hdpaSubItems; @@ -4164,7 +4148,6 @@ { DPA_DeletePtr(infoPtr->hdpaPosX, nItem); DPA_DeletePtr(infoPtr->hdpaPosY, nItem); - LISTVIEW_InvalidateRect(infoPtr, &rcBox); } infoPtr->nItemCount--; -- Dimi.