LISTVIEW_SetItemCount without LVS_OWNERDATA take 2
Duane Clark
dclark at akamail.com
Sun Feb 2 17:05:21 CST 2003
As Dimi pointed out, we should have infoPtr->nItemCount correct at the
end of every iteration through the loop.
Changelog:
Implement LISTVIEW_SetItemCount without LVS_OWNERDATA
-------------- next part --------------
Index: dlls/comctl32/listview.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/listview.c,v
retrieving revision 1.338
diff -u -r1.338 listview.c
--- dlls/comctl32/listview.c 24 Jan 2003 00:54:59 -0000 1.338
+++ dlls/comctl32/listview.c 2 Feb 2003 23:04:34 -0000
@@ -6657,13 +6657,25 @@
}
else
{
- /* According to MSDN for non-LVS_OWNERDATA this is just
- * a performance issue. The control allocates its internal
- * data structures for the number of items specified. It
- * cuts down on the number of memory allocations. Therefore
- * we will just issue a WARN here
- */
- WARN("for non-ownerdata performance option not implemented.\n");
+ HDPA hdpaSubItems;
+ ITEM_INFO *lpItem;
+ int i;
+
+ infoPtr->nItemCount = 0;
+ for (i=0; i<nItems; i++)
+ {
+ if ( !(lpItem = (ITEM_INFO *)COMCTL32_Alloc(sizeof(ITEM_INFO))) )
+ return 0;
+
+ /* insert item in listview control data structure */
+ if ( (hdpaSubItems = DPA_Create(8)) )
+ {
+ if ( !DPA_SetPtr(hdpaSubItems, 0, lpItem) ) assert (FALSE);
+
+ DPA_InsertPtr( infoPtr->hdpaItems, i, hdpaSubItems );
+ }
+ infoPtr->nItemCount++;
+ }
}
return TRUE;
More information about the wine-patches
mailing list