Revert item width calculation to fix performance issues.
Nikolay Sivov
bunglehead at gmail.com
Mon Feb 8 08:52:45 CST 2010
This reverts commits:
fc43895f49a423bdc6d826be7ad16b00c960612c (functional part)
c2a7535e9d112989abe687255b4f0da9a597678e
A better solution needed here to update item width on
item insertion. Iterating all items on every insert is
too slow.
---
dlls/comctl32/listview.c | 13 +++----------
dlls/comctl32/tests/listview.c | 2 +-
2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 80a32f7..cf06e09 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -401,7 +401,7 @@ typedef struct tagLISTVIEW_INFO
#define MAX_EMPTYTEXT_SELECT_WIDTH 80
/* default column width for items in list display mode */
-#define DEFAULT_COLUMN_WIDTH 96
+#define DEFAULT_COLUMN_WIDTH 128
/* Size of "line" scroll for V & H scrolls */
#define LISTVIEW_SCROLL_ICON_LINE_SIZE 37
@@ -2808,7 +2808,6 @@ static INT LISTVIEW_CalculateItemWidth(const LISTVIEW_INFO *infoPtr)
{
WCHAR szDispText[DISP_TEXT_SIZE] = { '\0' };
LVITEMW lvItem;
- BOOL empty;
INT i;
lvItem.mask = LVIF_TEXT;
@@ -2823,19 +2822,13 @@ static INT LISTVIEW_CalculateItemWidth(const LISTVIEW_INFO *infoPtr)
nItemWidth = max(LISTVIEW_GetStringWidthT(infoPtr, lvItem.pszText, TRUE),
nItemWidth);
}
- empty = nItemWidth == 0;
if (infoPtr->himlSmall) nItemWidth += infoPtr->iconSize.cx;
if (infoPtr->himlState) nItemWidth += infoPtr->iconStateSize.cx;
- if (empty)
- nItemWidth = max(nItemWidth, DEFAULT_COLUMN_WIDTH);
- else
- nItemWidth += WIDTH_PADDING;
+ nItemWidth = max(DEFAULT_COLUMN_WIDTH, nItemWidth + WIDTH_PADDING);
}
- TRACE("nItemWidth=%d\n", nItemWidth);
-
return nItemWidth;
}
@@ -7480,7 +7473,7 @@ static INT LISTVIEW_InsertItemT(LISTVIEW_INFO *infoPtr, const LVITEMW *lpLVItem,
TRACE(" inserting at %d, sorted=%d, count=%d, iItem=%d\n", nItem, is_sorted, infoPtr->nItemCount, lpLVItem->iItem);
nItem = DPA_InsertPtr( infoPtr->hdpaItems, nItem, hdpaSubItems );
if (nItem == -1) goto fail;
- if (++infoPtr->nItemCount > 0) LISTVIEW_UpdateItemSize(infoPtr);
+ infoPtr->nItemCount++;
/* shift indices first so they don't get tangled */
LISTVIEW_ShiftIndices(infoPtr, nItem, 1);
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 0bac4ec..9014f72 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -3967,7 +3967,7 @@ static void test_getcolumnwidth(void)
memset(&itema, 0, sizeof(itema));
SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM)&itema);
ret = SendMessage(hwnd, LVM_GETCOLUMNWIDTH, 0, 0);
- expect(96, ret);
+ todo_wine expect(96, ret);
DestroyWindow(hwnd);
}
--
1.5.6.5
--=-7w4HIYSWuSfq3B71kpHt--
More information about the wine-patches
mailing list