Nikolay Sivov : comctl32/listview: Partial fix for LVM_GETSUBITEMRECT for item == -1.
Alexandre Julliard
julliard at winehq.org
Wed Apr 22 10:18:50 CDT 2009
Module: wine
Branch: master
Commit: 457c983ee397ed7f836d4dc389e0b015251145fe
URL: http://source.winehq.org/git/wine.git/?a=commit;h=457c983ee397ed7f836d4dc389e0b015251145fe
Author: Nikolay Sivov <bunglehead at gmail.com>
Date: Wed Apr 22 13:51:02 2009 -0400
comctl32/listview: Partial fix for LVM_GETSUBITEMRECT for item == -1.
---
dlls/comctl32/listview.c | 18 ++++++++++++++++++
dlls/comctl32/tests/listview.c | 13 ++++++-------
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index e6fa8ec..c6a06c7 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -5984,6 +5984,24 @@ static BOOL LISTVIEW_GetSubItemRect(const LISTVIEW_INFO *infoPtr, INT nItem, LPR
if ((infoPtr->dwStyle & LVS_TYPEMASK) != LVS_REPORT) return FALSE;
+ /* special case for header items */
+ if (nItem == -1)
+ {
+ if (lprc->left != LVIR_BOUNDS)
+ {
+ FIXME("Only LVIR_BOUNDS is implemented for header, got %d\n", lprc->left);
+ return FALSE;
+ }
+
+ if (infoPtr->hwndHeader)
+ return Header_GetItemRect(infoPtr->hwndHeader, lprc->top, lprc);
+ else
+ {
+ memset(lprc, 0, sizeof(RECT));
+ return TRUE;
+ }
+ }
+
if (!LISTVIEW_GetItemPosition(infoPtr, nItem, &Position)) return FALSE;
if (nColumn < 0 || nColumn >= DPA_GetPtrCount(infoPtr->hdpaColumns)) return FALSE;
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index fba7a01..61dca76 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -988,7 +988,6 @@ static void test_create(void)
rect.top = 1;
rect.right = rect.bottom = -10;
r = SendMessage(hList, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect);
-todo_wine
ok(r != 0, "Expected not-null LRESULT\n");
hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
@@ -996,11 +995,10 @@ todo_wine
ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
expect(0, rect.left);
-todo_wine {
expect(0, rect.right);
expect(0, rect.top);
expect(0, rect.bottom);
-}
+
DestroyWindow(hList);
}
@@ -1537,22 +1535,23 @@ static void test_subitem_rect(void)
rect.top = 1;
rect.right = rect.bottom = 0;
r = SendMessage(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect);
-todo_wine{
+
ok(r != 0, "Expected not-null LRESULT\n");
expect(100, rect.left);
expect(250, rect.right);
+todo_wine
expect(3, rect.top);
-}
+
rect.left = LVIR_BOUNDS;
rect.top = 2;
rect.right = rect.bottom = 0;
r = SendMessage(hwnd, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect);
-todo_wine{
+
ok(r != 0, "Expected not-null LRESULT\n");
expect(250, rect.left);
expect(450, rect.right);
+todo_wine
expect(3, rect.top);
-}
DestroyWindow(hwnd);
More information about the wine-cvs
mailing list