Listview X3

Dimitrie O. Paun dpaun at rogers.com
Thu Oct 24 00:28:12 CDT 2002


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.




More information about the wine-patches mailing list