From 56ba3ff8f98a9fb14f63fbb91e63bb88144ef4cf Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 3 Mar 2015 19:21:21 +0300 Subject: [PATCH] diff: do not scroll to change, if visible position was changed during loading --- .../tools/util/threeside/ThreesideTextDiffViewer.java | 1 + .../diff/tools/util/twoside/TwosideTextDiffViewer.java | 1 + .../diff-impl/src/com/intellij/diff/util/DiffUtil.java | 10 ++++++++++ 3 files changed, 12 insertions(+) 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");