Module: wine Branch: master Commit: 949e9043b94c847243422c82436eab942e663f55 URL: http://source.winehq.org/git/wine.git/?a=commit;h=949e9043b94c847243422c8243...
Author: Nikolay Sivov bunglehead@gmail.com Date: Tue Apr 21 05:26:10 2009 -0400
comctl32/listview: LVM_SETITEM is unsupported on LVS_OWNERDATA.
---
dlls/comctl32/listview.c | 7 ++++--- dlls/comctl32/tests/listview.c | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 3c294f2..1ba8162 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -10010,10 +10010,11 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) /* case LVM_SETINSERTMARKCOLOR: */
case LVM_SETITEMA: - return LISTVIEW_SetItemT(infoPtr, (LPLVITEMW)lParam, FALSE); - case LVM_SETITEMW: - return LISTVIEW_SetItemT(infoPtr, (LPLVITEMW)lParam, TRUE); + { + if (infoPtr->dwStyle & LVS_OWNERDATA) return FALSE; + return LISTVIEW_SetItemT(infoPtr, (LPLVITEMW)lParam, (uMsg == LVM_SETITEMW)); + }
case LVM_SETITEMCOUNT: return LISTVIEW_SetItemCount(infoPtr, (INT)wParam, (DWORD)lParam); diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 6b68c56..b85dbfb 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -1651,6 +1651,24 @@ static void test_ownerdata(void) expect(TRUE, res); res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0); expect(1, res); + res = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); + expect(1, res); + DestroyWindow(hwnd); + + /* LVM_SETITEM is unsupported on LVS_OWNERDATA */ + hwnd = create_listview_control(LVS_OWNERDATA); + ok(hwnd != NULL, "failed to create a listview window\n"); + res = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0); + ok(res != 0, "Expected LVM_SETITEMCOUNT to succeed\n"); + res = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); + expect(1, res); + memset(&item, 0, sizeof(item)); + item.mask = LVIF_STATE; + item.iItem = 0; + item.stateMask = LVIS_SELECTED; + item.state = LVIS_SELECTED; + res = SendMessageA(hwnd, LVM_SETITEM, 0, (LPARAM)&item); + expect(FALSE, res); DestroyWindow(hwnd); }