From f644c787ee4fb26db07e36975337f3338a94a70d Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Thu, 22 May 2003 03:34:54 +0000 Subject: [PATCH] Update ordering on insertion of an item. --- dlls/comctl32/header.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c index 1f8987dc8d..3c20b601f4 100644 --- a/dlls/comctl32/header.c +++ b/dlls/comctl32/header.c @@ -845,7 +845,7 @@ HEADER_InsertItemA (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 @@ HEADER_InsertItemA (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 @@ HEADER_InsertItemA (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 @@ HEADER_InsertItemA (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 @@ HEADER_InsertItemW (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 @@ HEADER_InsertItemW (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 @@ HEADER_InsertItemW (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 @@ HEADER_InsertItemW (HWND hwnd, WPARAM wParam, LPARAM lParam) 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); -- 2.32.0.93.g670b81a890