From c5263f92fea506c30e4d19f015388c8202d01124 Mon Sep 17 00:00:00 2001 From: Skylot <118523+skylot@users.noreply.github.com> Date: Sat, 12 Oct 2024 19:23:42 +0100 Subject: [PATCH] fix(gui): send select tab event before code jump (#2292) --- .../src/main/java/jadx/gui/ui/MainWindow.java | 9 ++------- .../main/java/jadx/gui/ui/tab/TabComponent.java | 2 +- .../main/java/jadx/gui/ui/tab/TabsController.java | 15 ++++++++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index e3aa3efea..839b8ba11 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -877,12 +877,7 @@ public class MainWindow extends JFrame { return true; } } else if (obj instanceof JNode) { - JNode node = (JNode) obj; - if (node.getRootClass() != null) { - tabsController.codeJump(node); - return true; - } - tabsController.selectTab(node); + tabsController.codeJump((JNode) obj); return true; } } catch (Exception e) { @@ -1022,7 +1017,7 @@ public class MainWindow extends JFrame { } JResource res = new JResource(androidManifest, androidManifest.getDeobfName(), JResource.JResType.FILE); - tabsController.selectTab(res); + tabsController.codeJump(res); } private void initMenuAndToolbar() { diff --git a/jadx-gui/src/main/java/jadx/gui/ui/tab/TabComponent.java b/jadx-gui/src/main/java/jadx/gui/ui/tab/TabComponent.java index 6a90f4931..14d3cdb35 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/tab/TabComponent.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/tab/TabComponent.java @@ -284,7 +284,7 @@ public class TabComponent extends JPanel { JNode node = tab.getNode(); final String clsName = node.makeLongString(); JMenuItem item = new JMenuItem(clsName); - item.addActionListener(e -> tabsController.selectTab(node)); + item.addActionListener(e -> tabsController.codeJump(node)); item.setIcon(node.getIcon()); menu.add(item); } diff --git a/jadx-gui/src/main/java/jadx/gui/ui/tab/TabsController.java b/jadx-gui/src/main/java/jadx/gui/ui/tab/TabsController.java index f903a5f01..ff0b6ef9d 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/tab/TabsController.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/tab/TabsController.java @@ -98,10 +98,15 @@ public class TabsController { } // Not an inline node, jump normally - if (node.getPos() != 0 || node.getRootClass() == null) { + if (node.getPos() > 0) { codeJump(new JumpPosition(node)); return; } + if (node.getRootClass() == null) { + // not a class, select tab without position scroll + selectTab(node); + return; + } // node need loading loadCodeWithUIAction(node.getRootClass(), () -> codeJump(new JumpPosition(node))); } @@ -140,15 +145,15 @@ public class TabsController { * Prefer {@link TabsController#codeJump(JNode)} method */ public void codeJump(JumpPosition pos) { - if (selectedTab == null) { - LOG.warn("Cannot codeJump because selectedTab is null"); - return; + if (selectedTab == null || selectedTab.getNode() != pos.getNode()) { + selectTab(pos.getNode()); } listeners.forEach(l -> l.onTabCodeJump(selectedTab, pos)); } public void smaliJump(JClass cls, int pos, boolean debugMode) { - TabBlueprint blueprint = openTab(cls); + selectTab(cls); + TabBlueprint blueprint = getTabByNode(cls); listeners.forEach(l -> l.onTabSmaliJump(blueprint, pos, debugMode)); }