-- v11: comctl32/listview: Do not return items count on getting next item for last one. comctl32/listview: Add LVM_GETNEXTITEM test.
From: Ilia Docin ilya.docin@contentai.ru
--- dlls/comctl32/tests/listview.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 920c2c1c351..758512b7c63 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -7234,6 +7234,36 @@ static void test_LVM_SETBKIMAGE(BOOL is_v6) CoUninitialize(); }
+static void test_LVM_GETNEXTITEM(void) +{ + /* LVM_GETNEXTITEM */ + + HWND hwnd; + DWORD r; + UINT uFlagsAbove = MAKELPARAM(LVNI_ABOVE, 0); + UINT uFlagsBelow = MAKELPARAM(LVNI_BELOW, 0); + + hwnd = create_listview_control(LVS_REPORT); + insert_item(hwnd, 0); + insert_item(hwnd, 1); + insert_item(hwnd, 2); + + r = SendMessageA(hwnd, LVM_GETNEXTITEM, 0, uFlagsAbove); + expect(-1, r); + r = SendMessageA(hwnd, LVM_GETNEXTITEM, 0, uFlagsBelow); + expect(1, r); + r = SendMessageA(hwnd, LVM_GETNEXTITEM, 1, uFlagsAbove); + expect(0, r); + r = SendMessageA(hwnd, LVM_GETNEXTITEM, 1, uFlagsBelow); + expect(2, r); + r = SendMessageA(hwnd, LVM_GETNEXTITEM, 2, uFlagsAbove); + expect(1, r); + r = SendMessageA(hwnd, LVM_GETNEXTITEM, 2, uFlagsBelow); + expect(-1, r); + + DestroyWindow(hwnd); +} + START_TEST(listview) { ULONG_PTR ctx_cookie; @@ -7348,6 +7378,7 @@ START_TEST(listview) test_item_state_change(); test_selected_column(); test_LVM_GETNEXTITEMINDEX(); + test_LVM_GETNEXTITEM(); test_LVM_SETBKIMAGE(TRUE);
unload_v6_module(ctx_cookie, hCtx);
From: Ilia Docin ilya.docin@contentai.ru
--- dlls/comctl32/listview.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 0302e3e19a0..13d1bd092f2 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -7371,7 +7371,7 @@ static INT LISTVIEW_GetNextItem(const LISTVIEW_INFO *infoPtr, INT nItem, UINT uF { if ((infoPtr->uView == LV_VIEW_LIST) || (infoPtr->uView == LV_VIEW_DETAILS)) { - while (nItem < infoPtr->nItemCount) + while (nItem < infoPtr->nItemCount - 1) { nItem++; if ((LISTVIEW_GetItemState(infoPtr, nItem, uMask) & uMask) == uMask)
On Sat Jul 13 02:56:46 2024 +0000, Zhiyi Zhang wrote:
Please add the tests first and put them in a separate commit. You can mark the tests that are failing on Wine with a todo_wine.
Done.