Vitaliy Margolen : comctl32: Listview - allow selection toggle with ctrl+space.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jan 3 06:37:46 CST 2006


Module: wine
Branch: refs/heads/master
Commit: a8e59b1c52866af35244b226b9fe98648cb3e6af
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=a8e59b1c52866af35244b226b9fe98648cb3e6af

Author: Vitaliy Margolen <wine-patch at kievinfo.com>
Date:   Tue Jan  3 12:11:18 2006 +0100

comctl32: Listview - allow selection toggle with ctrl+space.

---

 dlls/comctl32/listview.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 3cb5137..4b95caf 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -3173,6 +3173,7 @@ static BOOL LISTVIEW_KeySelection(LISTVI
   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(LISTVI
       }
       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
 
   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
     break;
   }
 
-  if ((nItem != -1) && (nItem != infoPtr->nFocusedItem))
+  if ((nItem != -1) && (nItem != infoPtr->nFocusedItem || nVirtualKey == VK_SPACE))
       LISTVIEW_KeySelection(infoPtr, nItem);
 
   return 0;




More information about the wine-cvs mailing list