From 5f1876e478b9f88e243fd21f1a8ca6ac7ee65115 Mon Sep 17 00:00:00 2001 From: d-millar <33498836+d-millar@users.noreply.github.com> Date: Thu, 1 Apr 2021 13:25:53 -0400 Subject: [PATCH] debugger: fix for recursive loop / need for context to be set --- .../gui/target/DebuggerTargetsProvider.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java index 2ddd4f59d7..2910d74d8d 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java @@ -226,13 +226,16 @@ public class DebuggerTargetsProvider extends ComponentProviderAdapter { return mainPanel; } - private void setContextAndEmitEvents() { + private void setContext() { myActionContext = new DebuggerModelActionContext(this, tree.getSelectionPath(), tree); + contextChanged(); + } + + private void emitEvents() { DebuggerObjectModel model = myActionContext.getIfDebuggerModel(); if (model != null) { modelService.activateModel(model); } - contextChanged(); } private void buildMainPanel() { @@ -244,14 +247,16 @@ public class DebuggerTargetsProvider extends ComponentProviderAdapter { tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); mainPanel.add(tree); + // NB: for both of these, setContext should precede emitEvents tree.getGTSelectionModel().addGTreeSelectionListener(evt -> { - if (evt.getEventOrigin() == EventOrigin.API_GENERATED) { - return; + setContext(); + if (evt.getEventOrigin() != EventOrigin.API_GENERATED) { + emitEvents(); } - setContextAndEmitEvents(); }); tree.addGTModelListener((AnyChangeTreeModelListener) e -> { - setContextAndEmitEvents(); + setContext(); + emitEvents(); }); }