It seems to me, that the listview keeps autoarranging items even in non-LVS_AUTOARRANGE mode, until one is placed somewhere explicitly. If you know otherwise, please let me know. ChangeLog Keep autoarranging items until one is moved. --- dlls/comctl32/listview.c.X2 Thu Oct 24 01:19:04 2002 +++ dlls/comctl32/listview.c Thu Oct 24 01:24:36 2002 @@ -251,6 +251,7 @@ INT ntmHeight; /* From GetTextMetrics from above font */ BOOL bRedraw; /* Turns on/off repaints & invalidations */ BOOL bFirstPaint; /* Flags if the control has never painted before */ + BOOL bAutoarrange; /* Autoarrange flag when NOT in LVS_AUTOARRANGE */ BOOL bFocus; INT nFocusedItem; RECT rcFocus; @@ -1173,7 +1174,8 @@ { UINT uView = infoPtr->dwStyle & LVS_TYPEMASK; - return (infoPtr->dwStyle & LVS_AUTOARRANGE) && (uView == LVS_ICON || uView == LVS_SMALLICON); + return ((infoPtr->dwStyle & LVS_AUTOARRANGE) || infoPtr->bAutoarrange) && + (uView == LVS_ICON || uView == LVS_SMALLICON); } /******** Internal API functions ************************************/ @@ -2056,7 +2058,8 @@ case LVA_SNAPTOGRID: next_pos = LISTVIEW_NextIconPosTop; break; /* FIXME */ default: return FALSE; } - + + infoPtr->bAutoarrange = TRUE; infoPtr->currIconPos.x = infoPtr->currIconPos.y = 0; for (i = 0; i < infoPtr->nItemCount; i++) { @@ -6562,6 +6565,8 @@ pt.x -= Origin.x; pt.y -= Origin.y; + infoPtr->bAutoarrange = FALSE; + return LISTVIEW_MoveIconTo(infoPtr, nItem, &pt, FALSE); } -- Dimi.