From f510ddf3382e00032c770fda81e768ea62272004 Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Fri, 21 Jun 2019 18:37:46 -0400 Subject: [PATCH] GT-2925 - Key Bindings - Support Window Menu Provider Key Bindings - Step 2 - fixed bug that allowed dummy actions into the toolbar; updated DockingAction to handle null keybindings the same way as null menu and toolbar data --- .../ghidra/util/table/actions/DeleteTableRowAction.java | 6 ++++++ .../Docking/src/main/java/docking/ComponentProvider.java | 6 +----- .../src/main/java/docking/action/KeyBindingData.java | 4 ++++ .../src/main/java/docking/actions/ToolActions.java | 8 ++++++-- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java b/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java index 852a840f62..19199be766 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java @@ -200,6 +200,12 @@ public class DeleteTableRowAction extends DockingAction { public DummyDeleteAction(PluginTool tool) { super(NAME, "Tool", DEFAULT_KEYSTROKE); + + // prevent this action from appearing in the toolbar, menus, etc + setToolBarData(null); + setPopupMenuData(null); + setKeyBindingData(null); + tool.addAction(this); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java b/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java index 5c58c6c5d1..9a1e4f851f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java @@ -539,11 +539,7 @@ public abstract class ComponentProvider implements HelpDescriptor, ActionContext Fix: - -Toolbar description for key doesn't match menu (goes away) - -dummy actions getting added to toolbar - -cleanup odd relationship with keybindings action and UI (move to tool?? - or ToolActions...<= this) - + -Toolbar description for key doesn't match menu (goes away) */ diff --git a/Ghidra/Framework/Docking/src/main/java/docking/action/KeyBindingData.java b/Ghidra/Framework/Docking/src/main/java/docking/action/KeyBindingData.java index 180ec8fd11..dee9dc6a60 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/action/KeyBindingData.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/action/KeyBindingData.java @@ -80,6 +80,10 @@ public class KeyBindingData { * @return the potentially changed data */ public static KeyBindingData validateKeyBindingData(KeyBindingData newKeyBindingData) { + if (newKeyBindingData == null) { + return null; + } + KeyStroke keyBinding = newKeyBindingData.getKeyBinding(); if (keyBinding == null) { // not sure when this can happen diff --git a/Ghidra/Framework/Docking/src/main/java/docking/actions/ToolActions.java b/Ghidra/Framework/Docking/src/main/java/docking/actions/ToolActions.java index fe9b9048d7..5bdb9ec11a 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/actions/ToolActions.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/actions/ToolActions.java @@ -300,8 +300,12 @@ public class ToolActions implements PropertyChangeListener { return; } - KeyBindingData keyBindingData = (KeyBindingData) evt.getNewValue(); - KeyStroke newKeyStroke = keyBindingData.getKeyBinding(); + KeyBindingData newKeyBindingData = (KeyBindingData) evt.getNewValue(); + KeyStroke newKeyStroke = null; + if (newKeyBindingData != null) { + newKeyStroke = newKeyBindingData.getKeyBinding(); + } + Options opt = dockingTool.getOptions(DockingToolConstants.KEY_BINDINGS); KeyStroke optKeyStroke = opt.getKeyStroke(action.getFullName(), null); if (newKeyStroke == null) {