Listview L0

Dimitrie O. Paun dpaun at rogers.com
Sun Oct 6 02:23:39 CDT 2002


ChangeLog
  Fix potential bug in RemoveAllItems
  Fix report-mode ONWERDRAW bug (with help from Alexandre Julliard)
  Fix multiple selection bug (in report and list mode)
  Remove code duplication for removing selections.

Index: dlls/comctl32/listview.c
===================================================================
RCS file: /var/cvs/wine/dlls/comctl32/listview.c,v
retrieving revision 1.174
diff -u -r1.174 listview.c
--- dlls/comctl32/listview.c	5 Oct 2002 18:05:27 -0000	1.174
+++ dlls/comctl32/listview.c	6 Oct 2002 07:17:17 -0000
@@ -126,6 +126,7 @@
   INT nItemWidth;
   HDPA hdpaSelectionRanges;
   INT nSelectionMark;
+  BOOL bRemovingAllSelections;
   INT nHotItem;
   SHORT notifyFormat;
   RECT rcList;                 /* This rectangle is really the window
@@ -2069,11 +2070,10 @@
 static LRESULT LISTVIEW_RemoveAllSelections(LISTVIEW_INFO *infoPtr)
 {
     RANGE *sel;
-    static BOOL removing_all_selections = FALSE;
 
-    if (removing_all_selections) return TRUE;
+    if (infoPtr->bRemovingAllSelections) return TRUE;
 
-    removing_all_selections = TRUE;
+    infoPtr->bRemovingAllSelections = TRUE;
 
     TRACE("()\n");
 
@@ -2084,7 +2084,7 @@
     }
     while (infoPtr->hdpaSelectionRanges->nItemCount > 0);
 
-    removing_all_selections = FALSE;
+    infoPtr->bRemovingAllSelections = FALSE;
 
     return TRUE;
 }
@@ -2287,7 +2287,7 @@
 	    nFirst = min(infoPtr->nSelectionMark, nItem);
 	    nLast = max(infoPtr->nSelectionMark, nItem);
 	}
-	for (i = nFirst; i < nLast; i++)
+	for (i = nFirst; i <= nLast; i++)
 	    LISTVIEW_SetItemState(infoPtr, i, &item);
     }
     else
@@ -3377,9 +3377,6 @@
             dis.CtlID = uID;
             dis.itemID = nItem;
             dis.itemAction = ODA_DRAWENTIRE;
-            if (item.state & LVIS_SELECTED) dis.itemAction |= ODA_SELECT;
-            if (item.state & LVIS_FOCUSED) dis.itemAction |= ODA_FOCUS;
-	    /*dis.itemState = ODS_DEFAULT; */
             if (item.state & LVIS_SELECTED) dis.itemState |= ODS_SELECTED;
             if (item.state & LVIS_FOCUSED) dis.itemState |= ODS_FOCUS;
             dis.hwndItem = infoPtr->hwndSelf;
@@ -6725,19 +6722,7 @@
               : "",
               (dwFlags & LVSICF_NOSCROLL) ? "LVSICF_NOSCROLL" : "");
 
-      /*
-       * Internally remove all the selections.
-       * FIXME: why not RemoveAllSelections
-       */
-      do
-      {
-        RANGE *selection;
-        selection = DPA_GetPtr(infoPtr->hdpaSelectionRanges,0);
-        if (selection)
-            LISTVIEW_RemoveSelectionRange(infoPtr,selection->lower,
-                                          selection->upper);
-      }
-      while (infoPtr->hdpaSelectionRanges->nItemCount>0);
+      LISTVIEW_RemoveAllSelections(infoPtr);
 
       precount = infoPtr->hdpaItems->nItemCount;
       topvisible = LISTVIEW_GetTopIndex(infoPtr) +




More information about the wine-patches mailing list