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
|
static LRESULT
|
||||||
TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
|
TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
|
||||||
{
|
{
|
||||||
TREEVIEW_ITEM *oldSelection = infoPtr->selectedItem;
|
TREEVIEW_ITEM *newSelection = NULL;
|
||||||
TREEVIEW_ITEM *newSelection = oldSelection;
|
|
||||||
TREEVIEW_ITEM *newFirstVisible = NULL;
|
TREEVIEW_ITEM *newFirstVisible = NULL;
|
||||||
TREEVIEW_ITEM *parent, *prev = NULL;
|
TREEVIEW_ITEM *parent, *prev = NULL;
|
||||||
BOOL visible = FALSE;
|
BOOL visible = FALSE;
|
||||||
|
@ -1476,6 +1475,9 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
|
||||||
newSelection = wineItem->nextSibling;
|
newSelection = wineItem->nextSibling;
|
||||||
else if (wineItem->parent != infoPtr->root)
|
else if (wineItem->parent != infoPtr->root)
|
||||||
newSelection = wineItem->parent;
|
newSelection = wineItem->parent;
|
||||||
|
else
|
||||||
|
newSelection = wineItem->prevSibling;
|
||||||
|
TRACE("newSelection = %p\n", newSelection);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (infoPtr->firstVisible == wineItem)
|
if (infoPtr->firstVisible == wineItem)
|
||||||
|
@ -1494,13 +1496,11 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
|
||||||
TREEVIEW_RemoveItem(infoPtr, wineItem);
|
TREEVIEW_RemoveItem(infoPtr, wineItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't change if somebody else already has. */
|
/* Don't change if somebody else already has (infoPtr->selectedItem is cleared by FreeItem). */
|
||||||
if (oldSelection == infoPtr->selectedItem)
|
if (!infoPtr->selectedItem && newSelection)
|
||||||
{
|
{
|
||||||
if (TREEVIEW_ValidItem(infoPtr, newSelection))
|
if (TREEVIEW_ValidItem(infoPtr, newSelection))
|
||||||
TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, newSelection, TVC_UNKNOWN);
|
TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, newSelection, TVC_UNKNOWN);
|
||||||
else
|
|
||||||
infoPtr->selectedItem = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Validate insertMark dropItem.
|
/* Validate insertMark dropItem.
|
||||||
|
|
Loading…
Reference in New Issue