This should fix Rein's update problems. Silly me, I was coding to the specifications... :/ ChangeLog Despite what the docs say, we have to invalidate the list on WM_SETREDRAW(TRUE). --- dlls/comctl32/listview.c.Z4 2002-10-25 11:24:19.000000000 -0400 +++ dlls/comctl32/listview.c 2002-10-25 14:44:15.000000000 -0400 @@ -1209,7 +1209,7 @@ return infoPtr->bRedraw && !infoPtr->bFirstPaint; } -static inline void LISTVIEW_InvalidateRect(LISTVIEW_INFO *infoPtr, const RECT*rect) +static inline void LISTVIEW_InvalidateRect(LISTVIEW_INFO *infoPtr, const RECT* rect) { if(!is_redrawing(infoPtr)) return; TRACE(" invalidating rect=%s\n", debugrect(rect)); @@ -8031,6 +8031,11 @@ */ static LRESULT LISTVIEW_SetRedraw(LISTVIEW_INFO *infoPtr, BOOL bRedraw) { + TRACE("infoPtr->bRedraw=%d, bRedraw=%d\n", infoPtr->bRedraw, bRedraw); + + /* we can not use straight equality here because _any_ non-zero value is TRUE */ + if ((infoPtr->bRedraw && bRedraw) || (!infoPtr->bRedraw && !bRedraw)) return 0; + infoPtr->bRedraw = bRedraw; if(!bRedraw) return 0; @@ -8039,6 +8044,10 @@ LISTVIEW_Arrange(infoPtr, LVA_DEFAULT); LISTVIEW_UpdateScroll(infoPtr); + /* despite what the WM_SETREDRAW docs says, apps expect us + * to invalidate the listview here... stupid! */ + LISTVIEW_InvalidateList(infoPtr); + return 0; } -- Dimi.