Listview delete column zero

Duane Clark dclark at akamail.com
Thu Feb 13 21:54:37 CST 2003


While the MSDN specifically says that column zero should not be deleted,
it does in fact work on WinNT, and at least one app depends on it. On
WinNT, deleting column zero deletes the last column of items but the
first header. Since no app will ever depend on that bizarre behavior,
we just delete the last column including the header.

Changelog:
	Support the undocumented behavior of deleting column zero.

-------------- next part --------------
Index: dlls/comctl32/listview.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/listview.c,v
retrieving revision 1.340
diff -u -r1.340 listview.c
--- dlls/comctl32/listview.c	12 Feb 2003 21:28:04 -0000	1.340
+++ dlls/comctl32/listview.c	14 Feb 2003 03:38:13 -0000
@@ -4053,7 +4053,17 @@
     
     TRACE("nColumn=%d\n", nColumn);
 
-    if (nColumn <= 0 || nColumn >= infoPtr->hdpaColumns->nItemCount) return FALSE;
+    if (nColumn < 0 || infoPtr->hdpaColumns->nItemCount == 0
+           || nColumn >= infoPtr->hdpaColumns->nItemCount) return FALSE;
+
+    /* While the MSDN specifically says that column zero should not be deleted,
+       it does in fact work on WinNT, and at least one app depends on it. On
+       WinNT, deleting column zero deletes the last column of items but the
+       first header. Since no app will ever depend on that bizarre behavior, 
+       we just delete the last column including the header.
+     */
+    if (nColumn == 0)
+        nColumn = infoPtr->hdpaColumns->nItemCount - 1;
 
     LISTVIEW_GetHeaderRect(infoPtr, nColumn, &rcCol);
     
@@ -4069,6 +4079,9 @@
 	HDPA hdpaSubItems;
 	INT nItem, nSubItem, i;
 	
+	if (nColumn == 0)
+	    return LISTVIEW_DeleteAllItems(infoPtr);
+	    
 	for (nItem = 0; nItem < infoPtr->nItemCount; nItem++)
 	{
 	    hdpaSubItems = (HDPA)DPA_GetPtr(infoPtr->hdpaItems, nItem);


More information about the wine-patches mailing list