diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 79ac0e3254d..0c53bc32704 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -5928,6 +5928,7 @@ static BOOL LISTVIEW_GetItemRect(const LISTVIEW_INFO *infoPtr, INT nItem, LPRECT BOOL doLabel = TRUE, oversizedBox = FALSE; POINT Position, Origin; LVITEMW lvItem; + INT type; 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); } + type = lprc->left; if (uView == LVS_REPORT && (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT) && lprc->left == LVIR_SELECTBOUNDS) lprc->left = LVIR_BOUNDS; switch(lprc->left) @@ -5987,7 +5989,10 @@ static BOOL LISTVIEW_GetItemRect(const LISTVIEW_INFO *infoPtr, INT nItem, LPRECT 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)); diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 3f499f62265..793717c39ac 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -2590,11 +2590,9 @@ static void test_getitemrect(void) r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); - /* zero width rectangle */ -todo_wine { + /* zero width rectangle with no padding */ expect(0, rect.left); - expect(0, rect.right); -} + todo_wine expect(0, rect.right); insert_column(hwnd, 0); insert_column(hwnd, 1); @@ -2615,9 +2613,8 @@ todo_wine { expect(TRUE, r); /* still no left padding */ -todo_wine { expect(0, rect.left); -} + expect(150, rect.right); rect.left = LVIR_SELECTBOUNDS; rect.right = rect.top = rect.bottom = -1; @@ -2640,9 +2637,9 @@ todo_wine { rect.right = rect.top = rect.bottom = -1; r = SendMessage(hwnd, LVM_GETITEMRECT, 0, (LPARAM)&rect); expect(TRUE, r); - todo_wine expect(0, rect.left); + expect(0, rect.left); /* just width sum */ - todo_wine expect(150, rect.right); + expect(150, rect.right); rect.left = LVIR_SELECTBOUNDS; rect.right = rect.top = rect.bottom = -1;