Move the selection to the previous sibling if it can't go to the next

or the parent.
Fix the selection change logic.
This commit is contained in:
Huw Davies 2004-01-21 22:16:02 +00:00 committed by Alexandre Julliard
parent 0f3d8bf500
commit 84e7547ef1
1 changed files with 6 additions and 6 deletions

View File

@ -1440,8 +1440,7 @@ TREEVIEW_RemoveTree(TREEVIEW_INFO *infoPtr)
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 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
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_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
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.