Nikolay Sivov : comctl32/listview: Revert item width calculation to fix performance issues.

Alexandre Julliard julliard at winehq.org
Mon Feb 8 11:06:09 CST 2010


Module: wine
Branch: master
Commit: 057267d85e14b1954f5a6735a53a5287962a8a3c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=057267d85e14b1954f5a6735a53a5287962a8a3c

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Mon Feb  8 17:52:45 2010 +0300

comctl32/listview: Revert item width calculation to fix performance issues.

---

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




More information about the wine-cvs mailing list