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);