Initialize listview item size.

Dimitrie O. Paun dpaun at rogers.com
Wed Feb 5 00:54:30 CST 2003


On February 3, 2003 11:58 am, Duane Clark wrote:
> This is a separate bug from the other listview patches. If an app sends
> a LISTVIEW_Paint to a new listview before adding any items (which an app
> was :-) the item size was not getting set, causing subsequent
> LISTVIEW_Paint calls to clip the painting.
>
> Changelog:
>         Make sure item size is initialized when the first item is added.

This is an optimization I've put in to avoid a lot of complex calculations
while the listview is initially populated (typically before it's being
painted). You are right, we have to detect the change nItemCount from 0
to 1, to do all those calculations. But since we don't actually need them
until we paint, I'd like to defer them as much as possible. Moreover,
with your patch, we don't catch the SetItemCount case. What about this
patch instead:

Index: dlls/comctl32/listview.c
===================================================================
RCS file: /var/cvs/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	5 Feb 2003 06:48:41 -0000
@@ -7850,7 +7850,7 @@
 {
     TRACE("(hdc=%p)\n", hdc);
 
-    if (infoPtr->bFirstPaint)
+    if (infoPtr->bFirstPaint && infoPtr->nItemCount)
     {
 	UINT uView =  infoPtr->dwStyle & LVS_TYPEMASK;
 	


-- 
Dimi.




More information about the wine-devel mailing list