treeview: selection notification in tvm_deleteitem
Huw D M Davies
h.davies1 at physics.ox.ac.uk
Wed Jan 21 06:51:34 CST 2004
Huw Davies <huw at codeweavers.com>
Move the selection to the previous sibling if it can't go to
the next or the parent.
Fix the selection change logic.
--
Huw Davies
huw at codeweavers.com
Index: dlls/comctl32/treeview.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/treeview.c,v
retrieving revision 1.141
diff -u -r1.141 treeview.c
--- dlls/comctl32/treeview.c 7 Jan 2004 00:47:35 -0000 1.141
+++ dlls/comctl32/treeview.c 21 Jan 2004 12:45:04 -0000
@@ -1440,8 +1440,7 @@
static LRESULT
TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
{
- TREEVIEW_ITEM *oldSelection = infoPtr->selectedItem;
- TREEVIEW_ITEM *newSelection = oldSelection;
+ TREEVIEW_ITEM *newSelection = NULL;
TREEVIEW_ITEM *newFirstVisible = NULL;
TREEVIEW_ITEM *parent, *prev = NULL;
BOOL visible = FALSE;
@@ -1476,6 +1475,9 @@
newSelection = wineItem->nextSibling;
else if (wineItem->parent != infoPtr->root)
newSelection = wineItem->parent;
+ else
+ newSelection = wineItem->prevSibling;
+ TRACE("newSelection = %p\n", newSelection);
}
if (infoPtr->firstVisible == wineItem)
@@ -1494,13 +1496,11 @@
TREEVIEW_RemoveItem(infoPtr, wineItem);
}
- /* Don't change if somebody else already has. */
- if (oldSelection == infoPtr->selectedItem)
+ /* Don't change if somebody else already has (infoPtr->selectedItem is cleared by FreeItem). */
+ if (!infoPtr->selectedItem && newSelection)
{
if (TREEVIEW_ValidItem(infoPtr, newSelection))
TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, newSelection, TVC_UNKNOWN);
- else
- infoPtr->selectedItem = 0;
}
/* Validate insertMark dropItem.
More information about the wine-patches
mailing list