From 5b20de91606d6d7cae57a7e4cac435f86957141e Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Wed, 19 Mar 2008 15:01:25 -0700 Subject: [PATCH 2/2] comctl32: implement listview checkbox toggle --- dlls/comctl32/listview.c | 25 ++++++++++++++++--------- dlls/comctl32/tests/listview.c | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 9f4bd7b..b3445d9 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -1353,6 +1353,19 @@ static inline BOOL is_autoarrange(const LISTVIEW_INFO *infoPtr) (uView == LVS_ICON || uView == LVS_SMALLICON); } +static void toggle_checkbox_state(LISTVIEW_INFO *infoPtr, INT nItem) +{ + DWORD state = STATEIMAGEINDEX(LISTVIEW_GetItemState(infoPtr, nItem, LVIS_STATEIMAGEMASK)); + if(state == 1 || state == 2) + { + LVITEMW lvitem; + state ^= 3; + lvitem.state = INDEXTOSTATEIMAGEMASK(state); + lvitem.stateMask = LVIS_STATEIMAGEMASK; + LISTVIEW_SetItemState(infoPtr, nItem, &lvitem); + } +} + /******** Internal API functions ************************************/ static inline COLUMN_INFO * LISTVIEW_GetColumnInfo(const LISTVIEW_INFO *infoPtr, INT nSubItem) @@ -8283,6 +8296,8 @@ static LRESULT LISTVIEW_KeyDown(LISTVIEW_INFO *infoPtr, INT nVirtualKey, LONG lK { case VK_SPACE: nItem = infoPtr->nFocusedItem; + if (infoPtr->dwLvExStyle & LVS_EX_CHECKBOXES) + toggle_checkbox_state(infoPtr, infoPtr->nFocusedItem); break; case VK_RETURN: @@ -8475,15 +8490,7 @@ static LRESULT LISTVIEW_LButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, IN { if ((infoPtr->dwLvExStyle & LVS_EX_CHECKBOXES) && (lvHitTestInfo.flags & LVHT_ONITEMSTATEICON)) { - DWORD state = STATEIMAGEINDEX(LISTVIEW_GetItemState(infoPtr, nItem, LVIS_STATEIMAGEMASK)); - if(state == 1 || state == 2) - { - LVITEMW lvitem; - state ^= 3; - lvitem.state = INDEXTOSTATEIMAGEMASK(state); - lvitem.stateMask = LVIS_STATEIMAGEMASK; - LISTVIEW_SetItemState(infoPtr, nItem, &lvitem); - } + toggle_checkbox_state(infoPtr, nItem); return 0; } diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 99c026f..ad82579 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -564,7 +564,7 @@ static void test_checkboxes(void) item.mask = LVIF_STATE; item.stateMask = 0xffff; r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item); - todo_wine ok(item.state == 0x2aab, "state %x\n", item.state); + ok(item.state == 0x2aab, "state %x\n", item.state); r = SendMessage(hwnd, WM_KEYDOWN, VK_SPACE, 0); expect(0, r); -- 1.5.2.5