From a818badf01457710fc31ddbbf131e6fa95229823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 18 Nov 2021 19:48:05 +0100 Subject: [PATCH] Fixed #1685 generic tag editor - removing multiple items at once vs single item --- CHANGELOG.md | 2 ++ .../flash/gui/GenericTagTreePanel.java | 20 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d07d5dd6c..6d71121ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ All notable changes to this project will be documented in this file. - AS3 jumps deobfuscator - [#1699] AS1/2 detection of unitialized vars stuck - [#1686] AS1/2 decompilation and editation of nested tellTarget +- [#1685] generic tag editor - removing multiple items at once vs single item ## [14.4.0] - 2021-04-05 ### Added @@ -2215,6 +2216,7 @@ All notable changes to this project will be documented in this file. [#1726]: https://www.free-decompiler.com/flash/issues/1726 [#1699]: https://www.free-decompiler.com/flash/issues/1699 [#1686]: https://www.free-decompiler.com/flash/issues/1686 +[#1685]: https://www.free-decompiler.com/flash/issues/1685 [#1015]: https://www.free-decompiler.com/flash/issues/1015 [#1466]: https://www.free-decompiler.com/flash/issues/1466 [#1513]: https://www.free-decompiler.com/flash/issues/1513 diff --git a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java index d0832cba8..3a6ceac0d 100644 --- a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java @@ -351,14 +351,22 @@ public class GenericTagTreePanel extends GenericTagPanel { @Override public void actionPerformed(ActionEvent e) { TreePath tps[] = tree.getSelectionPaths(); + if (tps == null) { + tps = new TreePath[]{selPath}; + } + boolean somethingRemoved = false; for (int t = tps.length - 1; t >= 0; t--) { TreePath tp = tps[t]; Object selObject = tp.getLastPathComponent(); if (selObject instanceof FieldNode) { final FieldNode fnode = (FieldNode) selObject; removeItem(fnode.obj, fnode.fieldSet.get(FIELD_INDEX), fnode.index); + somethingRemoved = true; } } + if (!somethingRemoved) { + removeItem(fnode.obj, fnode.fieldSet.get(FIELD_INDEX), fnode.index); + } } }); p.add(mi); @@ -425,14 +433,24 @@ public class GenericTagTreePanel extends GenericTagPanel { @Override public void actionPerformed(ActionEvent e) { TreePath tps[] = tree.getSelectionPaths(); + if (tps == null) { + tps = new TreePath[]{selPath}; + } + boolean someRemoved = false; for (int t = tps.length - 1; t >= 0; t--) { TreePath tp = tps[t]; Object selObject = tp.getLastPathComponent(); if (selObject instanceof FieldNode) { final FieldNode fnode = (FieldNode) selObject; - removeItem(fnode.obj, fnode.fieldSet.get(FIELD_INDEX), fnode.index); + if (fnode.index > -1) { + removeItem(fnode.obj, fnode.fieldSet.get(FIELD_INDEX), fnode.index); + someRemoved = true; + } } } + if (!someRemoved) { + removeItem(fnode.obj, fnode.fieldSet.get(FIELD_INDEX), fnode.index); + } } }); p.add(mi);