Fix ListView Bugs

Dimitrie O. Paun dpaun at rogers.com
Mon May 19 02:31:26 CDT 2003


On May 17, 2003 06:37 am, Robert Shearman wrote:
> It is the second one. The 0th subitem always seems to stay in the 0th
> column and the other subitems are shifted. (Note that the column headings
> are shifted normally, ie. column 0 has a new column heading).

Interesting. This seems to mean that we can remove a lot of fancy code
from there :) What about this patch:

Index: dlls/comctl32/listview.c
===================================================================
RCS file: /var/cvs/wine/dlls/comctl32/listview.c,v
retrieving revision 1.351
diff -u -r1.351 listview.c
--- dlls/comctl32/listview.c	13 May 2003 00:30:10 -0000	1.351
+++ dlls/comctl32/listview.c	19 May 2003 07:28:54 -0000
@@ -6242,25 +6242,10 @@
     /* now we have to actually adjust the data */
     if (!(infoPtr->dwStyle & LVS_OWNERDATA) && infoPtr->nItemCount > 0)
     {
-	SUBITEM_INFO *lpSubItem, *lpMainItem, **lpNewItems = 0;
+	SUBITEM_INFO *lpSubItem;
 	HDPA hdpaSubItems;
 	INT nItem, i;
 	
-	/* preallocate memory, so we can fail gracefully */
-	if (nNewColumn == 0)
-	{
-	    lpNewItems = COMCTL32_Alloc(sizeof(SUBITEM_INFO *) * infoPtr->nItemCount);
-	    if (!lpNewItems) goto fail;
-	    for (i = 0; i < infoPtr->nItemCount; i++)
-		if (!(lpNewItems[i] = COMCTL32_Alloc(sizeof(SUBITEM_INFO)))) break;
-	    if (i != infoPtr->nItemCount)
-	    {
-		for(; i >=0; i--) COMCTL32_Free(lpNewItems[i]);
-		COMCTL32_Free(lpNewItems);
-		goto fail;
-	    }
-	}
-	
 	for (nItem = 0; nItem < infoPtr->nItemCount; nItem++)
 	{
 	    hdpaSubItems = (HDPA)DPA_GetPtr(infoPtr->hdpaItems, nItem);
@@ -6270,21 +6255,7 @@
 		if (lpSubItem->iSubItem >= nNewColumn)
 		    lpSubItem->iSubItem++;
 	    }
-
-	    /* for inserting column 0, we have to special-case the main item */	
-	    if (nNewColumn == 0)
-	    {
-		lpMainItem = (SUBITEM_INFO *)DPA_GetPtr(hdpaSubItems, 0);
-		lpSubItem = lpNewItems[nItem];
-		lpSubItem->hdr = lpMainItem->hdr;
-		lpSubItem->iSubItem = 1;
-		ZeroMemory(&lpMainItem->hdr, sizeof(lpMainItem->hdr));
-		lpMainItem->iSubItem = 0;
-		DPA_InsertPtr(hdpaSubItems, 1, lpSubItem);
-    	    }
 	}
-
-	COMCTL32_Free(lpNewItems);
     }
 
     /* make space for the new column */


-- 
Dimi.




More information about the wine-devel mailing list