diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java index f049f9b8f00c..d6f3d6ce6110 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java @@ -463,6 +463,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { } public void onRediff() { + if (DiffUtil.wasScrolled(getEditors())) myShouldScroll = false; if (myShouldScroll && myScrollToChange != null) { myShouldScroll = !doScrollToChange(myScrollToChange); } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java index 0e776baa4ab0..450a0498345b 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java @@ -495,6 +495,7 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { } public void onRediff() { + if (DiffUtil.wasScrolled(getEditors())) myShouldScroll = false; if (myShouldScroll && myScrollToChange != null) { myShouldScroll = !doScrollToChange(myScrollToChange); } diff --git a/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java b/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java index 3f79865d3f10..77592f6985c2 100644 --- a/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java +++ b/platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java @@ -249,6 +249,16 @@ public class DiffUtil { return carets; } + public static boolean wasScrolled(@NotNull List editors) { + for (Editor editor : editors) { + if (editor == null) continue; + if (editor.getCaretModel().getOffset() != 0) return true; + if (editor.getScrollingModel().getVerticalScrollOffset() != 0) return true; + if (editor.getScrollingModel().getHorizontalScrollOffset() != 0) return true; + } + return false; + } + public static class EditorsVisiblePositions { public static final Key KEY = Key.create("Diff.EditorsVisiblePositions");