Listview W8

Dimitrie O. Paun dpaun at rogers.com
Wed Oct 23 11:16:48 CDT 2002


This should fix a FTP Commander bug reported by Carlos.

ChangeLog
  Delay some size computations until after first paint.

--- dlls/comctl32/listview.c.W7	Wed Oct 23 12:00:09 2002
+++ dlls/comctl32/listview.c	Wed Oct 23 12:14:16 2002
@@ -54,6 +54,7 @@
  *
  * Speedups
  *   -- LISTVIEW_SetItemCount is too invalidation happy
+ *   -- LISTVIEW_Size invalidates too much
  *   -- in sorted mode, LISTVIEW_InsertItemT sorts the array,
  *      instead of inserting in the right spot
  *   -- we should keep an ordered array of coordinates in iconic mode
@@ -250,6 +251,7 @@
   BOOL bFocus;
   INT nFocusedItem;
   RECT rcFocus;
+  BOOL bFirstPaint;		/* Flags if the control has never painted before */
   DWORD dwStyle;		/* the cached window GWL_STYLE */
   DWORD dwLvExStyle;		/* extended listview style */
   INT nItemCount;		/* the number of items in the list */
@@ -6896,6 +6898,7 @@
   infoPtr->iconSpacing.cx = GetSystemMetrics(SM_CXICONSPACING);
   infoPtr->iconSpacing.cy = GetSystemMetrics(SM_CYICONSPACING);
   infoPtr->nEditLabelItem = -1;
+  infoPtr->bFirstPaint = TRUE;
 
   /* get default font (icon title) */
   SystemParametersInfoW(SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
@@ -6956,9 +6959,6 @@
   infoPtr->hdpaPosX  = DPA_Create(10);
   infoPtr->hdpaPosY  = DPA_Create(10);
 
-  /* initialize size of items */
-  LISTVIEW_UpdateItemSize(infoPtr);
-
   /* initialize the hover time to -1(indicating the default system hover time) */
   infoPtr->dwHoverTime = -1;
 
@@ -7705,6 +7705,16 @@
 {
     TRACE("(hdc=%p)\n", hdc);
 
+    if (infoPtr->bFirstPaint)
+    {
+	UINT uView =  infoPtr->dwStyle & LVS_TYPEMASK;
+	
+	LISTVIEW_UpdateItemSize(infoPtr);
+	if (uView == LVS_ICON || uView == LVS_SMALLICON)
+	    LISTVIEW_Arrange(infoPtr, LVA_DEFAULT);
+	LISTVIEW_UpdateScroll(infoPtr);
+	infoPtr->bFirstPaint = FALSE;
+    }
     if (hdc) 
 	LISTVIEW_Refresh(infoPtr, hdc);
     else
@@ -7982,7 +7992,7 @@
 
     LISTVIEW_UpdateScroll(infoPtr);
 
-    LISTVIEW_InvalidateList(infoPtr);
+    LISTVIEW_InvalidateList(infoPtr); /* FIXME: optimize */
 
   return 0;
 }




More information about the wine-patches mailing list