From 84e7547ef1b59d10d7f8e4055cb4ed0e8c6efc43 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Wed, 21 Jan 2004 22:16:02 +0000 Subject: [PATCH] Move the selection to the previous sibling if it can't go to the next or the parent. Fix the selection change logic. --- dlls/comctl32/treeview.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c index a645f43658b..1c1caec0c77 100644 --- a/dlls/comctl32/treeview.c +++ b/dlls/comctl32/treeview.c @@ -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.