@@ -1423,7 +1423,7 @@ TBaseVirtualTree = class abstract(TVTBaseAncestor)
1423
1423
function EndEditNode: Boolean;
1424
1424
procedure EndSynch;
1425
1425
procedure EndUpdate; virtual;
1426
- procedure EnsureNodeSelected(); virtual;
1426
+ procedure EnsureNodeSelected(pAfterDeletion: Boolean ); virtual;
1427
1427
function ExecuteAction(Action: TBasicAction): Boolean; override;
1428
1428
procedure FinishCutOrCopy;
1429
1429
procedure FlushClipboard;
@@ -10205,7 +10205,7 @@ procedure TBaseVirtualTree.DoCollapsed(Node: PVirtualNode);
10205
10205
end;//if
10206
10206
//if there is (still) no selected node, then use FNextNodeToSelect to select one
10207
10207
if SelectedCount = 0 then
10208
- EnsureNodeSelected();
10208
+ EnsureNodeSelected(False );
10209
10209
end;//if
10210
10210
end;
10211
10211
@@ -10550,7 +10550,7 @@ procedure TBaseVirtualTree.DoEndOperation(OperationKind: TVTOperationKind);
10550
10550
procedure TBaseVirtualTree.DoEnter();
10551
10551
begin
10552
10552
inherited;
10553
- EnsureNodeSelected();
10553
+ EnsureNodeSelected(False );
10554
10554
end;
10555
10555
10556
10556
//----------------------------------------------------------------------------------------------------------------------
@@ -10672,7 +10672,7 @@ procedure TBaseVirtualTree.DoFreeNode(Node: PVirtualNode);
10672
10672
10673
10673
FreeMem(Node);
10674
10674
if Self.UpdateCount = 0 then
10675
- EnsureNodeSelected();
10675
+ EnsureNodeSelected(True );
10676
10676
end;
10677
10677
10678
10678
//----------------------------------------------------------------------------------------------------------------------
@@ -12083,9 +12083,11 @@ procedure TBaseVirtualTree.EnsureNodeFocused();
12083
12083
12084
12084
//----------------------------------------------------------------------------------------------------------------------
12085
12085
12086
- procedure TBaseVirtualTree.EnsureNodeSelected();
12086
+ procedure TBaseVirtualTree.EnsureNodeSelected(pAfterDeletion: Boolean );
12087
12087
begin
12088
- if (toAlwaysSelectNode in TreeOptions.SelectionOptions) and not IsEmpty then
12088
+ if IsEmpty then
12089
+ exit; // Nothing to do
12090
+ if (toAlwaysSelectNode in TreeOptions.SelectionOptions) or (pAfterDeletion and (toSelectNextNodeOnRemoval in TreeOptions.SelectionOptions)) then
12089
12091
begin
12090
12092
if (SelectedCount = 0) and not SelectionLocked then
12091
12093
begin
@@ -15259,7 +15261,7 @@ procedure TBaseVirtualTree.UpdateNextNodeToSelect(Node: PVirtualNode);
15259
15261
// selected one gets deleted.
15260
15262
15261
15263
begin
15262
- if not ( toAlwaysSelectNode in TreeOptions.SelectionOptions) then
15264
+ if ([ toAlwaysSelectNode, toSelectNextNodeOnRemoval] * TreeOptions.SelectionOptions) = [] then
15263
15265
Exit;
15264
15266
if GetNextSibling(Node) <> nil then
15265
15267
FNextNodeToSelect := GetNextSibling(Node)
@@ -16938,7 +16940,7 @@ procedure TBaseVirtualTree.DeleteChildren(Node: PVirtualNode; ResetHasChildren:
16938
16940
InvalidateToBottom(Node);
16939
16941
if tsChangePending in FStates then begin
16940
16942
DoChange(FLastChangedNode);
16941
- EnsureNodeSelected();
16943
+ EnsureNodeSelected(True );
16942
16944
end;
16943
16945
end;
16944
16946
StructureChange(Node, crChildDeleted);
@@ -17205,7 +17207,7 @@ procedure TBaseVirtualTree.EndUpdate;
17205
17207
NotifyAccessibilityCollapsed(); // See issue #1174
17206
17208
17207
17209
DoUpdating(usEnd);
17208
- EnsureNodeSelected();
17210
+ EnsureNodeSelected(False );
17209
17211
end
17210
17212
else
17211
17213
DoUpdating(usUpdate);
0 commit comments