fix(gui): resolve ignored mouse actions (#2360)
This commit is contained in:
@@ -9,12 +9,13 @@ import javax.swing.KeyStroke;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import jadx.gui.ui.menu.JadxMenu;
|
||||
import jadx.gui.utils.UiUtils;
|
||||
import jadx.gui.utils.shortcut.Shortcut;
|
||||
import jadx.gui.utils.ui.ActionHandler;
|
||||
|
||||
public class JadxGuiAction extends ActionHandler implements IShortcutAction {
|
||||
private static final String COMMAND = "JadxGuiAction.Command.%s";
|
||||
private static final String COMMAND_PREFIX = "JadxGuiAction.Command.";
|
||||
|
||||
private final ActionModel actionModel;
|
||||
private final String id;
|
||||
@@ -102,21 +103,20 @@ public class JadxGuiAction extends ActionHandler implements IShortcutAction {
|
||||
|
||||
@Override
|
||||
public void performAction() {
|
||||
if (shortcutComponent != null && !shortcutComponent.isShowing()) {
|
||||
return;
|
||||
if (shortcutComponent != null) {
|
||||
if (shortcutComponent == JadxMenu.JADX_MENU_COMPONENT) {
|
||||
// always enabled
|
||||
} else if (!shortcutComponent.isShowing()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
String shortcutType = "null";
|
||||
if (shortcut != null) {
|
||||
shortcutType = shortcut.getTypeString();
|
||||
}
|
||||
actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
|
||||
String.format(COMMAND, shortcutType)));
|
||||
String shortcutType = shortcut != null ? shortcut.getTypeString() : "null";
|
||||
actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, COMMAND_PREFIX + shortcutType));
|
||||
}
|
||||
|
||||
public static boolean isSource(ActionEvent event) {
|
||||
return event.getActionCommand() != null
|
||||
&& event.getActionCommand().startsWith(String.format(COMMAND, ""));
|
||||
String command = event.getActionCommand();
|
||||
return command != null && command.startsWith(COMMAND_PREFIX);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,7 +12,7 @@ import jadx.gui.utils.shortcut.ShortcutsController;
|
||||
|
||||
public class JadxMenu extends JMenu {
|
||||
// fake component to fill action shortcut component property
|
||||
private static final JComponent JADX_MENU_COMPONENT = new JComponent() {
|
||||
public static final JComponent JADX_MENU_COMPONENT = new JComponent() {
|
||||
@Override
|
||||
public String toString() {
|
||||
return "JADX_MENU_COMPONENT";
|
||||
|
||||
@@ -3,10 +3,11 @@ package jadx.gui.utils.shortcut;
|
||||
import java.awt.AWTEvent;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumMap;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -31,7 +32,7 @@ public class ShortcutsController {
|
||||
|
||||
private final JadxSettings settings;
|
||||
private final Map<ActionModel, Set<IShortcutAction>> boundActions = new EnumMap<>(ActionModel.class);
|
||||
private final Set<ActionModel> mouseActions = EnumSet.noneOf(ActionModel.class);
|
||||
private final Map<Integer, List<IShortcutAction>> mouseActions = new HashMap<>();
|
||||
|
||||
private ShortcutsWrapper shortcuts;
|
||||
|
||||
@@ -73,8 +74,7 @@ public class ShortcutsController {
|
||||
LOG.warn("No shortcut component in action: {}", action, new JadxRuntimeException());
|
||||
return;
|
||||
}
|
||||
boundActions.computeIfAbsent(action.getActionModel(), k -> new HashSet<>());
|
||||
boundActions.get(action.getActionModel()).add(action);
|
||||
boundActions.computeIfAbsent(action.getActionModel(), k -> new HashSet<>()).add(action);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -106,18 +106,12 @@ public class ShortcutsController {
|
||||
if (mouseEvent.getID() != MouseEvent.MOUSE_PRESSED) {
|
||||
return;
|
||||
}
|
||||
int mouseButton = mouseEvent.getButton();
|
||||
for (ActionModel actionModel : mouseActions) {
|
||||
Shortcut shortcut = shortcuts.get(actionModel);
|
||||
if (shortcut != null && shortcut.getMouseButton() == mouseButton) {
|
||||
Set<IShortcutAction> actions = boundActions.get(actionModel);
|
||||
if (actions != null) {
|
||||
for (IShortcutAction action : actions) {
|
||||
if (action != null) {
|
||||
mouseEvent.consume();
|
||||
UiUtils.uiRun(action::performAction);
|
||||
}
|
||||
}
|
||||
List<IShortcutAction> actions = mouseActions.get(mouseEvent.getButton());
|
||||
if (actions != null) {
|
||||
for (IShortcutAction action : actions) {
|
||||
if (action != null) {
|
||||
mouseEvent.consume();
|
||||
UiUtils.uiRun(action::performAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -129,7 +123,11 @@ public class ShortcutsController {
|
||||
for (ActionModel actionModel : ActionModel.values()) {
|
||||
Shortcut shortcut = shortcuts.get(actionModel);
|
||||
if (shortcut != null && shortcut.isMouse()) {
|
||||
mouseActions.add(actionModel);
|
||||
Set<IShortcutAction> actions = boundActions.get(actionModel);
|
||||
if (actions != null && !actions.isEmpty()) {
|
||||
mouseActions.computeIfAbsent(shortcut.getMouseButton(), i -> new ArrayList<>())
|
||||
.addAll(actions);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user