[4/4] comctl32/listview: Some tests for LVS_SINGLESEL switchover

Nikolay Sivov bunglehead at gmail.com
Thu Apr 16 17:45:55 CDT 2009


Changelog:
    - Some tests for LVS_SINGLESEL switchover

>From 0cce19d11db8eb22ebd89b074c055b45e23ce0f4 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Thu, 16 Apr 2009 18:35:08 -0400
Subject: 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 870354c..60a4801 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -9570,7 +9570,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 5aa2f52..e8b1e5d 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 690ecbd..f2a608b 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) \
-- 
1.5.6.5





More information about the wine-patches mailing list