From 43f18dcb485eecc6ca19e95a823e7d567180c09a Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Tue, 23 Aug 2022 13:45:49 -0400 Subject: [PATCH] GP-2491 - Updated popup menu key event processing to not apply to combo boxes --- .../docking/menu/keys/MenuKeyProcessor.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/keys/MenuKeyProcessor.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/keys/MenuKeyProcessor.java index 27f9d43da1..041b7e605f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/keys/MenuKeyProcessor.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/keys/MenuKeyProcessor.java @@ -52,8 +52,8 @@ public class MenuKeyProcessor { MenuSelectionManager manager = MenuSelectionManager.defaultManager(); MenuElement[] path = manager.getSelectedPath(); - if (path == null || path.length == 0) { - return false; // no menu showing + if (!hasJPopupMenu(path)) { + return false; } KeyStroke eventStroke = KeyStroke.getKeyStrokeForEvent(event); @@ -67,6 +67,22 @@ public class MenuKeyProcessor { return false; } + private static boolean hasJPopupMenu(MenuElement[] path) { + if (path == null || path.length == 0) { + return false; // no menu showing + } + + // Checking for the exact class seems to be good enough for now. We can update later if + // we find this filters out too many use cases. At the time of writing, we do not want this + // code to apply to all popup windows, such as combo box popups. + for (MenuElement element : path) { + if (element.getClass().equals(JPopupMenu.class)) { + return true; + } + } + return false; + } + private static KeyStroke keyStroke(String s) { return KeyStroke.getKeyStroke("pressed " + s); }