From 00ccf38987a1b1bb908ad4e096176fc74bb7fd81 Mon Sep 17 00:00:00 2001
From: "Dimitrie O. Paun" <dpaun@rogers.com>
Date: Fri, 14 Feb 2003 19:24:11 +0000
Subject: [PATCH] Correctly remember the first paint event, but delay item
 metrics calculation until we actually have some items.

---
 dlls/comctl32/listview.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 49207085371..f103fd503e2 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -226,6 +226,7 @@ typedef struct tagLISTVIEW_INFO
   HIMAGELIST himlState;
   BOOL bLButtonDown;
   BOOL bRButtonDown;
+  BOOL bNoItemMetrics;		/* flags if item metrics are not yet computed */
   INT nItemHeight;
   INT nItemWidth;
   RANGES selectionRanges;
@@ -7034,6 +7035,7 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
   infoPtr->nHotItem = -1;
   infoPtr->bRedraw = TRUE;
   infoPtr->bFirstPaint = TRUE;
+  infoPtr->bNoItemMetrics = TRUE;
   infoPtr->iconSpacing.cx = GetSystemMetrics(SM_CXICONSPACING);
   infoPtr->iconSpacing.cy = GetSystemMetrics(SM_CYICONSPACING);
   infoPtr->nEditLabelItem = -1;
@@ -7852,11 +7854,12 @@ static LRESULT LISTVIEW_Paint(LISTVIEW_INFO *infoPtr, HDC hdc)
 {
     TRACE("(hdc=%p)\n", hdc);
 
-    if (infoPtr->bFirstPaint && infoPtr->nItemCount)
+    infoPtr->bFirstPaint = FALSE;
+    if (infoPtr->bNoItemMetrics && infoPtr->nItemCount)
     {
 	UINT uView =  infoPtr->dwStyle & LVS_TYPEMASK;
 	
-	infoPtr->bFirstPaint = FALSE;
+	infoPtr->bNoItemMetrics = FALSE;
 	LISTVIEW_UpdateItemSize(infoPtr);
 	if (uView == LVS_ICON || uView == LVS_SMALLICON)
 	    LISTVIEW_Arrange(infoPtr, LVA_DEFAULT);
-- 
GitLab