diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonFieldPanelCoordinator.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonFieldPanelCoordinator.java index d116a75103..d8ff25c7fc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonFieldPanelCoordinator.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonFieldPanelCoordinator.java @@ -132,11 +132,8 @@ public class ListingComparisonFieldPanelCoordinator extends LayoutLockedFieldPan (leftAddress != null) ? leftAddressIndexMap.getIndex(leftAddress) : null; BigInteger rightIndex = (rightAddress != null) ? rightAddressIndexMap.getIndex(rightAddress) : null; - - BigInteger[] lineNumbers = - new BigInteger[] { (leftIndex != null) ? leftIndex : BigInteger.ZERO, - (rightIndex != null) ? rightIndex : BigInteger.ZERO }; - setLockedLines(lineNumbers); + //lockLines will set null args to BigInteger.ZERO + lockLines(leftIndex, rightIndex); } /** diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanel.java index 220b96eba4..17bbc5d824 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/util/CodeComparisonPanel.java @@ -354,6 +354,7 @@ public abstract class CodeComparisonPanel exten } this.syncScrolling = syncScrolling; + // Refresh the left panel. FieldPanel leftPanel = getLeftFieldPanel(); leftPanel.validate(); @@ -363,6 +364,7 @@ public abstract class CodeComparisonPanel exten rightPanel.validate(); rightPanel.invalidate(); + setFieldPanelCoordinator(syncScrolling ? createFieldPanelCoordinator() : null); } } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LayoutLockedFieldPanelCoordinator.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LayoutLockedFieldPanelCoordinator.java index 81d3189ebc..a26795ea19 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LayoutLockedFieldPanelCoordinator.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LayoutLockedFieldPanelCoordinator.java @@ -15,11 +15,10 @@ */ package docking.widgets.fieldpanel.internal; -import ghidra.util.exception.AssertException; - import java.math.BigInteger; import docking.widgets.fieldpanel.*; +import ghidra.util.exception.AssertException; /** * A LayoutLockedFieldPanelCoordinator is an extension of a LineLockedFieldPanelCoordinator that diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LineLockedFieldPanelCoordinator.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LineLockedFieldPanelCoordinator.java index 0125872949..bcbdc8e3cb 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LineLockedFieldPanelCoordinator.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LineLockedFieldPanelCoordinator.java @@ -55,26 +55,29 @@ public class LineLockedFieldPanelCoordinator extends FieldPanelCoordinator { /** * Call this method whenever you want to change the line numbers that are locked together * for the associated field panels. - * @param lockedLineNumbers the array of locked line numbers that are directly associated with + * @param newLockedLines the array of locked line numbers that are directly associated with * the array of field panels.
* Important: Make sure the line numbers are in the order that matches the field panels in the array. */ - public void setLockedLines(BigInteger[] lockedLineNumbers) { - if (lockedLineNumbers.length != this.lockedLineNumbers.length) { - throw new AssertException("The number of lines(" + lockedLineNumbers.length + - ") must exactly match the number of panels(" + this.lockedLineNumbers.length + + public void lockLines(BigInteger... newLockedLines) { + if (newLockedLines.length != lockedLineNumbers.length) { + throw new AssertException("The number of lines(" + newLockedLines.length + + ") must exactly match the number of panels(" + lockedLineNumbers.length + ")."); } - for (int i = 0; i < lockedLineNumbers.length; i++) { - if (lockedLineNumbers[i] == null) { - lockedLineNumbers[i] = BigInteger.ZERO; + for (int i = 0; i < newLockedLines.length; i++) { + if (newLockedLines[i] == null) { + newLockedLines[i] = BigInteger.ZERO; } } - for (int i = 0; i < lockedLineNumbers.length; i++) { - if (!this.lockedLineNumbers[i].equals(lockedLineNumbers[i])) { - this.lockedLineNumbers[i] = lockedLineNumbers[i]; - } + if (valuesChanging) { + return; } + valuesChanging = true; + for (int i = 0; i < newLockedLines.length; i++) { + lockedLineNumbers[i] = newLockedLines[i]; + } + valuesChanging = false; } /**