Nikolay Sivov : comctl32/listview: Fix select rectangle calculation for empty text items.
Alexandre Julliard
julliard at winehq.org
Thu Jul 2 08:25:08 CDT 2009
Module: wine
Branch: master
Commit: 216ca479f2d18cbcd916525155b62f5a3bc34164
URL: http://source.winehq.org/git/wine.git/?a=commit;h=216ca479f2d18cbcd916525155b62f5a3bc34164
Author: Nikolay Sivov <bunglehead at gmail.com>
Date: Thu Jul 2 02:42:43 2009 +0400
comctl32/listview: Fix select rectangle calculation for empty text items.
---
dlls/comctl32/listview.c | 12 ++++++++++--
dlls/comctl32/tests/listview.c | 4 ++--
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index d7a5f97..2a66152 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -360,6 +360,8 @@ typedef struct tagLISTVIEW_INFO
/* default label width for items in list and small icon display modes */
#define DEFAULT_LABEL_WIDTH 40
+/* maximum select rectangle width for empty text item in LV_VIEW_DETAILS */
+#define MAX_EMPTYTEXT_SELECT_WIDTH 80
/* default column width for items in list display mode */
#define DEFAULT_COLUMN_WIDTH 128
@@ -2235,7 +2237,9 @@ static void LISTVIEW_GetItemMetrics(const LISTVIEW_INFO *infoPtr, const LVITEMW
DrawTextW (hdc, lpLVItem->pszText, -1, &rcText, uFormat | DT_CALCRECT);
- labelSize.cx = min(rcText.right - rcText.left + TRAILING_LABEL_PADDING, infoPtr->nItemWidth);
+ if (rcText.right != rcText.left)
+ labelSize.cx = min(rcText.right - rcText.left + TRAILING_LABEL_PADDING, infoPtr->nItemWidth);
+
labelSize.cy = rcText.bottom - rcText.top;
SelectObject(hdc, hOldFont);
@@ -2288,7 +2292,11 @@ calc_label:
SelectBox.left = Icon.left;
SelectBox.top = Box.top;
SelectBox.bottom = Box.bottom;
- SelectBox.right = min(Label.left + labelSize.cx, Label.right);
+
+ if (labelSize.cx)
+ SelectBox.right = min(Label.left + labelSize.cx, Label.right);
+ else
+ SelectBox.right = min(Label.left + MAX_EMPTYTEXT_SELECT_WIDTH, Label.right);
}
else
{
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index d11d9de..d5bcbf5 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -3067,7 +3067,7 @@ static void test_getitemrect(void)
expect(TRUE, r);
/* padding, column width */
expect(2, rect.left);
- todo_wine expect(50, rect.right);
+ expect(50, rect.right);
/* try with indentation */
item.mask = LVIF_INDENT;
@@ -3093,7 +3093,7 @@ static void test_getitemrect(void)
expect(TRUE, r);
/* padding + 1 icon width, column width */
expect(2 + 16, rect.left);
- todo_wine expect(50, rect.right);
+ expect(50, rect.right);
/* label bounds */
rect.left = LVIR_LABEL;
More information about the wine-cvs
mailing list