From 1fca469ccf78c1a4d744a0fa1dbf3dfc76377674 Mon Sep 17 00:00:00 2001 From: ghidragon <106987263+ghidragon@users.noreply.github.com> Date: Mon, 6 May 2024 17:06:58 -0400 Subject: [PATCH] GP-4580 fixing stack trace from actions dialog --- .../ghidra/app/util/viewer/listingpanel/ListingPanel.java | 6 ++++++ .../java/docking/actions/dialog/ActionChooserDialog.java | 4 ++++ .../src/main/java/docking/actions/dialog/ActionsModel.java | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingPanel.java index e698c5f728..df91f2956d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingPanel.java @@ -311,6 +311,8 @@ public class ListingPanel extends JPanel implements FieldMouseListener, FieldLoc } private void buildPanels() { + boolean fieldPanelHasFocus = fieldPanel.hasFocus(); + removeAll(); add(buildLeftComponent(), BorderLayout.WEST); add(buildCenterComponent(), BorderLayout.CENTER); @@ -320,6 +322,10 @@ public class ListingPanel extends JPanel implements FieldMouseListener, FieldLoc } revalidate(); repaint(); + + if (fieldPanelHasFocus) { + fieldPanel.requestFocusInWindow(); + } } private JComponent buildOverviewComponent() { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionChooserDialog.java b/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionChooserDialog.java index 891f72349b..e80488f620 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionChooserDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionChooserDialog.java @@ -291,6 +291,10 @@ public class ActionChooserDialog extends DialogComponentProvider { SearchListEntry value, int index, boolean isSelected, boolean hasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, hasFocus); + if (model.isDisposed()) { + // Some UIs may call the renderer on focus lost after the dialog is closed. + return this; + } DockingActionIf action = value.value(); String category = value.category(); Icon icon = getIcon(action, category); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionsModel.java b/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionsModel.java index 72a5f4b564..6653ef7bb1 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionsModel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionsModel.java @@ -84,6 +84,10 @@ public class ActionsModel extends DefaultSearchListModel { context = null; } + public boolean isDisposed() { + return context == null; + } + private void populateActions() { clearData(); switch (displayLevel) {