From 168fce3eda2d7592ae6a20070eeb1d681527d881 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Tue, 1 Apr 2025 12:34:09 -0400 Subject: [PATCH] GP-5550 Revised GTreeStartEditingTask node re-selection --- .../widgets/tree/tasks/GTreeStartEditingTask.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/tasks/GTreeStartEditingTask.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/tasks/GTreeStartEditingTask.java index 5adf732d4b..819fa1fedf 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/tasks/GTreeStartEditingTask.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/tasks/GTreeStartEditingTask.java @@ -16,6 +16,7 @@ package docking.widgets.tree.tasks; import java.util.Objects; +import java.util.function.Predicate; import javax.swing.CellEditor; import javax.swing.JTree; @@ -68,10 +69,16 @@ public class GTreeStartEditingTask extends GTreeTask { String newName = Objects.toString(cellEditor.getCellEditorValue()); cellEditor.removeCellEditorListener(this); - // note: this call only works when the parent cannot have duplicate named nodes - tree.whenNodeIsReady(modelParent, newName, newNode -> { + // NOTE: there may be cases where this node search fails to correctly + // identify the renamed node when name and node class is insufficient to match. + Class nodeClass = editNode.getClass(); + Predicate nodeMatches = n -> { + return nodeClass == n.getClass() && n.getName().equals(newName); + }; + tree.whenNodeIsReady(modelParent, nodeMatches, newNode -> { tree.setSelectedNode(newNode); }); + } });