Module: wine Branch: master Commit: 3ce8e20896a72de2022c62964744d1660011656d URL: http://source.winehq.org/git/wine.git/?a=commit;h=3ce8e20896a72de2022c629647...
Author: Nikolay Sivov bunglehead@gmail.com Date: Mon Apr 20 08:05:45 2009 -0400
comctl32/listview: Some tests for LVS_SINGLESEL switchover.
---
dlls/comctl32/listview.c | 1 - dlls/comctl32/tests/listview.c | 55 ++++++++++++++++++++++++++++++++++++++++ include/commctrl.h | 2 +- 3 files changed, 56 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index d249cff..3c294f2 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -9566,7 +9566,6 @@ static INT LISTVIEW_StyleChanged(LISTVIEW_INFO *infoPtr, WPARAM wStyleType, if (wStyleType != GWL_STYLE) return 0;
/* FIXME: if LVS_NOSORTHEADER changed, update header */ - /* or LVS_SINGLESEL */ /* or LVS_SORT{AS,DES}CENDING */
infoPtr->dwStyle = lpss->styleNew; diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 5733668..6b68c56 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -1351,6 +1351,7 @@ static void test_multiselect(void) static const int items=5; BYTE kstate[256]; select_task task; + LONG_PTR style;
static struct t_select_task task_list[] = { { "using VK_DOWN", 0, VK_DOWN, -1, -1 }, @@ -1407,6 +1408,60 @@ static void test_multiselect(void) SetKeyboardState(kstate); } DestroyWindow(hwnd); + + /* make multiple selection, then switch to LVS_SINGLESEL */ + hwnd = create_listview_control(0); + for (i=0;i<items;i++) { + insert_item(hwnd, 0); + } + item_count = (int)SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0); + expect(items,item_count); + /* deselect all items */ + ListView_SetItemState(hwnd, -1, 0, LVIS_SELECTED); + SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, -1); + for (i=0;i<3;i++) { + ListView_SetItemState(hwnd, i, LVIS_SELECTED, LVIS_SELECTED); + } + + r = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0); + expect(3, r); + r = SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0); +todo_wine + expect(-1, r); + + style = GetWindowLongPtrA(hwnd, GWL_STYLE); + ok(!(style & LVS_SINGLESEL), "LVS_SINGLESEL isn't expected\n"); + SetWindowLongPtrA(hwnd, GWL_STYLE, style | LVS_SINGLESEL); + /* check that style is accepted */ + style = GetWindowLongPtrA(hwnd, GWL_STYLE); + ok(style & LVS_SINGLESEL, "LVS_SINGLESEL expected\n"); + + for (i=0;i<3;i++) { + r = ListView_GetItemState(hwnd, i, LVIS_SELECTED); + ok(r & LVIS_SELECTED, "Expected item %d to be selected\n", i); + } + r = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0); + expect(3, r); + SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0); + expect(3, r); + + /* select one more */ + ListView_SetItemState(hwnd, 3, LVIS_SELECTED, LVIS_SELECTED); + + for (i=0;i<3;i++) { + r = ListView_GetItemState(hwnd, i, LVIS_SELECTED); + ok(!(r & LVIS_SELECTED), "Expected item %d to be unselected\n", i); + } + r = ListView_GetItemState(hwnd, 3, LVIS_SELECTED); + ok(r & LVIS_SELECTED, "Expected item %d to be selected\n", i); + + r = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0); + expect(1, r); + r = SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0); +todo_wine + expect(-1, r); + + DestroyWindow(hwnd); }
static void test_subitem_rect(void) diff --git a/include/commctrl.h b/include/commctrl.h index 9dc7f9d..4727e3e 100644 --- a/include/commctrl.h +++ b/include/commctrl.h @@ -3715,7 +3715,7 @@ typedef struct NMLVSCROLL { LVITEMA _LVi; _LVi.state = data; _LVi.stateMask = dataMask;\ SNDMSGA(hwnd, LVM_SETITEMSTATE, (WPARAM)(UINT)i, (LPARAM) (LPLVITEMA)&_LVi);} #define ListView_GetItemState(hwnd,i,mask) \ - (BOOL)SNDMSGA((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask)) + (UINT)SNDMSGA((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask)) #define ListView_GetCountPerPage(hwnd) \ (BOOL)SNDMSGW((hwnd),LVM_GETCOUNTPERPAGE,0,0L) #define ListView_GetImageList(hwnd,iImageList) \