[3/3] comctl32/listview: Invalidate list after WM_MEASUREITEM notification
Nikolay Sivov
bunglehead at gmail.com
Mon Jun 22 18:51:24 CDT 2009
http://bugs.winehq.org/show_bug.cgi?id=19024
Changelog:
- Invalidate list after WM_MEASUREITEM notification
>From 4df09300dac4cb5b46234ab702b1df4dfd0751da Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Mon, 22 Jun 2009 22:38:03 +0400
Subject: Invalidate list after WM_MEASUREITEM notification
---
dlls/comctl32/listview.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 0e22848..ab94936 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -1027,7 +1027,8 @@ static inline DWORD notify_postpaint (const LISTVIEW_INFO *infoPtr, NMLVCUSTOMDR
return notify_customdraw(infoPtr, CDDS_POSTPAINT, lpnmlvcd);
}
-static void notify_measureitem(LISTVIEW_INFO *infoPtr)
+/* returns TRUE when repaint needed, FALSE otherwise */
+static BOOL notify_measureitem(LISTVIEW_INFO *infoPtr)
{
MEASUREITEMSTRUCT mis;
mis.CtlType = ODT_LISTVIEW;
@@ -1038,7 +1039,11 @@ static void notify_measureitem(LISTVIEW_INFO *infoPtr)
mis.itemHeight= infoPtr->nItemHeight;
SendMessageW(infoPtr->hwndNotify, WM_MEASUREITEM, mis.CtlID, (LPARAM)&mis);
if (infoPtr->nItemHeight != max(mis.itemHeight, 1))
+ {
infoPtr->nMeasureItemHeight = infoPtr->nItemHeight = max(mis.itemHeight, 1);
+ return TRUE;
+ }
+ return FALSE;
}
/******** Item iterator functions **********************************/
@@ -10792,7 +10797,7 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if ((infoPtr->dwStyle & LVS_OWNERDRAWFIXED) && (infoPtr->uView == LV_VIEW_DETAILS))
{
- notify_measureitem(infoPtr);
+ if (notify_measureitem(infoPtr)) LISTVIEW_InvalidateList(infoPtr);
}
LISTVIEW_UpdateSize(infoPtr);
--
1.5.6.5
More information about the wine-patches
mailing list