-- v21: comctl32/listview: Do not return items count on getting next item for last one. comctl32/tests: Add LVM_GETNEXTITEM test.
From: Ilia Docin ilya.docin@contentai.ru
--- dlls/comctl32/tests/listview.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 920c2c1c351..6450cdf1f6b 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -7234,6 +7234,29 @@ static void test_LVM_SETBKIMAGE(BOOL is_v6) CoUninitialize(); }
+static void test_LVM_GETNEXTITEM(void) +{ + 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); + + 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); + todo_wine expect(-1, r); + + DestroyWindow(hwnd); +} + START_TEST(listview) { ULONG_PTR ctx_cookie; @@ -7300,6 +7323,7 @@ START_TEST(listview) test_item_state_change(); test_LVM_SETBKIMAGE(FALSE); test_custom_sort(); + test_LVM_GETNEXTITEM();
if (!load_v6_module(&ctx_cookie, &hCtx)) { @@ -7348,6 +7372,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 +- dlls/comctl32/tests/listview.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
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) diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 6450cdf1f6b..18e06ed7fa1 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -7252,7 +7252,7 @@ static void test_LVM_GETNEXTITEM(void) r = SendMessageA(hwnd, LVM_GETNEXTITEM, 1, uFlagsAbove); expect(0, r); r = SendMessageA(hwnd, LVM_GETNEXTITEM, 1, uFlagsBelow); - todo_wine expect(-1, r); + expect(-1, r);
DestroyWindow(hwnd); }
On Tue Aug 20 10:05:14 2024 +0000, Zhiyi Zhang wrote:
Looks good to me. Let's call test_LVM_GETNEXTITEM() here as well for testing comctl32 v5.
Added.
Zhiyi Zhang (@zhiyi) commented about dlls/comctl32/tests/listview.c:
CoUninitialize();
}
+static void test_LVM_GETNEXTITEM(void) +{
- HWND hwnd;
- DWORD r;
- UINT uFlagsAbove = MAKELPARAM(LVNI_ABOVE, 0);
uFlagsAbove and uFlagsBelow are not necessary. You can use LVNI_ABOVE and LVNI_BELOW directly instead. Cast them to LPARAM to avoid warnings if needed.
Zhiyi Zhang (@zhiyi) commented about dlls/comctl32/tests/listview.c:
CoUninitialize();
}
+static void test_LVM_GETNEXTITEM(void) +{
- HWND hwnd;
- DWORD r;
SendMessageA() returns a LRESULT so let's use a "LRESULT lr;" instead.