Update ordering on insertion of an item.
diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c
index 1f8987d..3c20b60 100644
--- a/dlls/comctl32/header.c
+++ b/dlls/comctl32/header.c
@@ -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);