Nikolay Sivov : comctl32: Fix item selection with VK_SPACE when Ctrl is pressed.
Alexandre Julliard
julliard at winehq.org
Wed Mar 11 10:04:24 CDT 2009
Module: wine
Branch: master
Commit: 24dc6600fccf13b41ae035ea61315cfe7ac3f0ac
URL: http://source.winehq.org/git/wine.git/?a=commit;h=24dc6600fccf13b41ae035ea61315cfe7ac3f0ac
Author: Nikolay Sivov <bunglehead at gmail.com>
Date: Tue Mar 10 19:05:03 2009 -0400
comctl32: Fix item selection with VK_SPACE when Ctrl is pressed.
---
dlls/comctl32/listview.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 66b45b4..5379561 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -425,7 +425,7 @@ static HWND LISTVIEW_EditLabelT(LISTVIEW_INFO *, INT, BOOL);
static LRESULT LISTVIEW_Command(const LISTVIEW_INFO *, WPARAM, LPARAM);
static BOOL LISTVIEW_SortItems(LISTVIEW_INFO *, PFNLVCOMPARE, LPARAM);
static INT LISTVIEW_GetStringWidthT(const LISTVIEW_INFO *, LPCWSTR, BOOL);
-static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *, INT);
+static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *, INT, BOOL);
static UINT LISTVIEW_GetItemState(const LISTVIEW_INFO *, INT, UINT);
static BOOL LISTVIEW_SetItemState(LISTVIEW_INFO *, INT, const LVITEMW *);
static LRESULT LISTVIEW_VScroll(LISTVIEW_INFO *, INT, INT, HWND);
@@ -1590,7 +1590,7 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L
nItem = notify_hdr(infoPtr, LVN_ODFINDITEMW, (LPNMHDR)&nmlv.hdr);
if (nItem != -1)
- LISTVIEW_KeySelection(infoPtr, nItem);
+ LISTVIEW_KeySelection(infoPtr, nItem, FALSE);
return 0;
}
@@ -1623,7 +1623,7 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L
} while (idx != endidx);
if (nItem != -1)
- LISTVIEW_KeySelection(infoPtr, nItem);
+ LISTVIEW_KeySelection(infoPtr, nItem, FALSE);
return 0;
}
@@ -3220,12 +3220,13 @@ static void LISTVIEW_SetSelection(LISTVIEW_INFO *infoPtr, INT nItem)
* PARAMETER(S):
* [I] infoPtr : valid pointer to the listview structure
* [I] nItem : item index
+ * [I] space : VK_SPACE code sent
*
* RETURN:
* SUCCESS : TRUE (needs to be repainted)
* FAILURE : FALSE (nothing has changed)
*/
-static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *infoPtr, INT nItem)
+static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *infoPtr, INT nItem, BOOL space)
{
/* FIXME: pass in the state */
WORD wShift = HIWORD(GetKeyState(VK_SHIFT));
@@ -3252,11 +3253,12 @@ static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *infoPtr, INT nItem)
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;
-
+ if (space)
+ {
+ LISTVIEW_SetItemState(infoPtr, nItem, &lvItem);
+ if (lvItem.state & LVIS_SELECTED)
+ infoPtr->nSelectionMark = nItem;
+ }
bResult = LISTVIEW_SetItemFocus(infoPtr, nItem);
}
else
@@ -8560,7 +8562,7 @@ static LRESULT LISTVIEW_KeyDown(LISTVIEW_INFO *infoPtr, INT nVirtualKey, LONG lK
}
if ((nItem != -1) && (nItem != infoPtr->nFocusedItem || nVirtualKey == VK_SPACE))
- LISTVIEW_KeySelection(infoPtr, nItem);
+ LISTVIEW_KeySelection(infoPtr, nItem, nVirtualKey == VK_SPACE);
return 0;
}
More information about the wine-cvs
mailing list