From a8e59b1c52866af35244b226b9fe98648cb3e6af Mon Sep 17 00:00:00 2001 From: Vitaliy Margolen Date: Tue, 3 Jan 2006 12:11:18 +0100 Subject: [PATCH] comctl32: Listview - allow selection toggle with ctrl+space. --- dlls/comctl32/listview.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 3cb5137da65..4b95cafd56d 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -3173,6 +3173,7 @@ static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *infoPtr, INT nItem) WORD wCtrl = HIWORD(GetKeyState(VK_CONTROL)); BOOL bResult = FALSE; + TRACE("nItem=%d, wShift=%d, wCtrl=%d\n", nItem, wShift, wCtrl); if ((nItem >= 0) && (nItem < infoPtr->nItemCount)) { if (infoPtr->dwStyle & LVS_SINGLESEL) @@ -3189,6 +3190,14 @@ static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *infoPtr, INT nItem) } else if (wCtrl) { + LVITEMW lvItem; + lvItem.state = ~LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED); + lvItem.stateMask = LVIS_SELECTED; + LISTVIEW_SetItemState(infoPtr, nItem, &lvItem); + + if (lvItem.state & LVIS_SELECTED) + infoPtr->nSelectionMark = nItem; + bResult = LISTVIEW_SetItemFocus(infoPtr, nItem); } else @@ -8016,6 +8025,10 @@ static LRESULT LISTVIEW_KeyDown(LISTVIEW_INFO *infoPtr, INT nVirtualKey, LONG lK switch (nVirtualKey) { + case VK_SPACE: + nItem = infoPtr->nFocusedItem; + break; + case VK_RETURN: if ((infoPtr->nItemCount > 0) && (infoPtr->nFocusedItem != -1)) { @@ -8082,7 +8095,7 @@ static LRESULT LISTVIEW_KeyDown(LISTVIEW_INFO *infoPtr, INT nVirtualKey, LONG lK break; } - if ((nItem != -1) && (nItem != infoPtr->nFocusedItem)) + if ((nItem != -1) && (nItem != infoPtr->nFocusedItem || nVirtualKey == VK_SPACE)) LISTVIEW_KeySelection(infoPtr, nItem); return 0; -- 2.11.4.GIT