comctl32/listview: LVM_GETITEMRECT: don't offset to item position on LVS_REPORT querying LVIR_BOUNDS.

This commit is contained in:
Nikolay Sivov 2009-05-26 23:04:50 +04:00 committed by Alexandre Julliard
parent 79ed5e0fac
commit 1a84ca42b2
2 changed files with 11 additions and 9 deletions

View File

@ -5928,6 +5928,7 @@ static BOOL LISTVIEW_GetItemRect(const LISTVIEW_INFO *infoPtr, INT nItem, LPRECT
BOOL doLabel = TRUE, oversizedBox = FALSE; BOOL doLabel = TRUE, oversizedBox = FALSE;
POINT Position, Origin; POINT Position, Origin;
LVITEMW lvItem; LVITEMW lvItem;
INT type;
TRACE("(hwnd=%p, nItem=%d, lprc=%p)\n", infoPtr->hwndSelf, nItem, lprc); TRACE("(hwnd=%p, nItem=%d, lprc=%p)\n", infoPtr->hwndSelf, nItem, lprc);
@ -5962,6 +5963,7 @@ static BOOL LISTVIEW_GetItemRect(const LISTVIEW_INFO *infoPtr, INT nItem, LPRECT
lvItem.state = (oversizedBox ? LVIS_FOCUSED : 0); lvItem.state = (oversizedBox ? LVIS_FOCUSED : 0);
} }
type = lprc->left;
if (uView == LVS_REPORT && (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT) && lprc->left == LVIR_SELECTBOUNDS) if (uView == LVS_REPORT && (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT) && lprc->left == LVIR_SELECTBOUNDS)
lprc->left = LVIR_BOUNDS; lprc->left = LVIR_BOUNDS;
switch(lprc->left) switch(lprc->left)
@ -5987,7 +5989,10 @@ static BOOL LISTVIEW_GetItemRect(const LISTVIEW_INFO *infoPtr, INT nItem, LPRECT
return FALSE; return FALSE;
} }
OffsetRect(lprc, Position.x + Origin.x, Position.y + Origin.y); if ((uView == LVS_REPORT) && (type == LVIR_BOUNDS))
OffsetRect(lprc, Origin.x, Origin.y);
else
OffsetRect(lprc, Position.x + Origin.x, Position.y + Origin.y);
TRACE(" rect=%s\n", wine_dbgstr_rect(lprc)); TRACE(" rect=%s\n", wine_dbgstr_rect(lprc));

View File

@ -2590,11 +2590,9 @@ static void test_getitemrect(void)
r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect);
expect(TRUE, r); expect(TRUE, r);
/* zero width rectangle */ /* zero width rectangle with no padding */
todo_wine {
expect(0, rect.left); expect(0, rect.left);
expect(0, rect.right); todo_wine expect(0, rect.right);
}
insert_column(hwnd, 0); insert_column(hwnd, 0);
insert_column(hwnd, 1); insert_column(hwnd, 1);
@ -2615,9 +2613,8 @@ todo_wine {
expect(TRUE, r); expect(TRUE, r);
/* still no left padding */ /* still no left padding */
todo_wine {
expect(0, rect.left); expect(0, rect.left);
} expect(150, rect.right);
rect.left = LVIR_SELECTBOUNDS; rect.left = LVIR_SELECTBOUNDS;
rect.right = rect.top = rect.bottom = -1; rect.right = rect.top = rect.bottom = -1;
@ -2640,9 +2637,9 @@ todo_wine {
rect.right = rect.top = rect.bottom = -1; rect.right = rect.top = rect.bottom = -1;
r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect);
expect(TRUE, r); expect(TRUE, r);
todo_wine expect(0, rect.left); expect(0, rect.left);
/* just width sum */ /* just width sum */
todo_wine expect(150, rect.right); expect(150, rect.right);
rect.left = LVIR_SELECTBOUNDS; rect.left = LVIR_SELECTBOUNDS;
rect.right = rect.top = rect.bottom = -1; rect.right = rect.top = rect.bottom = -1;