Header control ordering fix

Robert Shearman R.J.Shearman at warwick.ac.uk
Tue May 20 19:32:34 CDT 2003


Ordering wasn't being updated at all when items were being inserted, so this
patch fixes that.

ChangeLog:
Update ordering on insertion of an item

Rob
-------------- next part --------------
Index: wine/dlls/comctl32/header.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/header.c,v
retrieving revision 1.54
diff -u -r1.54 header.c
--- wine/dlls/comctl32/header.c	2 Dec 2002 18:11:00 -0000	1.54
+++ wine/dlls/comctl32/header.c	21 May 2003 00:07:36 -0000
@@ -845,7 +845,7 @@
     HDITEMA   *phdi = (HDITEMA*)lParam;
     INT       nItem = (INT)wParam;
     HEADER_ITEM *lpItem;
-    INT       len;
+    INT       len, i, iOrder;
 
     if ((phdi == NULL) || (nItem < 0))
 	return -1;
@@ -853,6 +853,8 @@
     if (nItem > infoPtr->uNumItem)
         nItem = infoPtr->uNumItem;
 
+    iOrder = (phdi->mask & HDI_ORDER) ? phdi->iOrder : nItem;
+
     if (infoPtr->uNumItem == 0) {
         infoPtr->items = COMCTL32_Alloc (sizeof (HEADER_ITEM));
         infoPtr->uNumItem++;
@@ -884,6 +886,12 @@
         COMCTL32_Free (oldItems);
     }
 
+    for (i=0; i < infoPtr->uNumItem; i++)
+    {
+        if (infoPtr->items[i].iOrder >= iOrder)
+            infoPtr->items[i].iOrder++;
+    }
+
     lpItem = &infoPtr->items[nItem];
     lpItem->bDown = FALSE;
 
@@ -921,13 +929,7 @@
     if (phdi->mask & HDI_IMAGE)
         lpItem->iImage = phdi->iImage;
 
-    if (phdi->mask & HDI_ORDER)
-      {
-        lpItem->iOrder = phdi->iOrder;
-      }
-    else
-      lpItem->iOrder=nItem;
-
+    lpItem->iOrder = iOrder;
 
     HEADER_SetItemBounds (hwnd);
 
@@ -944,7 +946,7 @@
     HDITEMW   *phdi = (HDITEMW*)lParam;
     INT       nItem = (INT)wParam;
     HEADER_ITEM *lpItem;
-    INT       len;
+    INT       len, i, iOrder;
 
     if ((phdi == NULL) || (nItem < 0))
 	return -1;
@@ -952,6 +954,8 @@
     if (nItem > infoPtr->uNumItem)
         nItem = infoPtr->uNumItem;
 
+    iOrder = (phdi->mask & HDI_ORDER) ? phdi->iOrder : nItem;
+
     if (infoPtr->uNumItem == 0) {
         infoPtr->items = COMCTL32_Alloc (sizeof (HEADER_ITEM));
         infoPtr->uNumItem++;
@@ -983,6 +987,12 @@
         COMCTL32_Free (oldItems);
     }
 
+    for (i=0; i < infoPtr->uNumItem; i++)
+    {
+        if (infoPtr->items[i].iOrder >= iOrder)
+            infoPtr->items[i].iOrder++;
+    }
+
     lpItem = &infoPtr->items[nItem];
     lpItem->bDown = FALSE;
 
@@ -1021,12 +1031,7 @@
     if (phdi->mask & HDI_IMAGE)
         lpItem->iImage = phdi->iImage;
 
-    if (phdi->mask & HDI_ORDER)
-      {
-        lpItem->iOrder = phdi->iOrder;
-      }
-    else
-      lpItem->iOrder = nItem;
+    lpItem->iOrder = iOrder;
 
     HEADER_SetItemBounds (hwnd);
 


More information about the wine-patches mailing list