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:
parent
0f3d8bf500
commit
84e7547ef1
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue