diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/AbstractToggleUseSoftWrapsAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/AbstractToggleUseSoftWrapsAction.java index 69e4f7b2991e..50b5cd8325cb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/AbstractToggleUseSoftWrapsAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/AbstractToggleUseSoftWrapsAction.java @@ -19,6 +19,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.ToggleAction; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; @@ -26,6 +27,8 @@ import com.intellij.openapi.project.DumbAware; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.awt.*; + /** * Provides common functionality for 'toggle soft wraps usage' actions. * @@ -61,6 +64,10 @@ public abstract class AbstractToggleUseSoftWrapsAction extends ToggleAction impl if (editor == null) { return; } + + Point point = editor.getScrollingModel().getVisibleArea().getLocation(); + LogicalPosition anchorPosition = editor.xyToLogicalPosition(point); + int intraLineShift = point.y - editor.logicalPositionToXY(anchorPosition).y; if (myGlobal) { EditorSettingsExternalizable.getInstance().setUseSoftWraps(state, myAppliancePlace); @@ -72,6 +79,10 @@ public abstract class AbstractToggleUseSoftWrapsAction extends ToggleAction impl if (editor instanceof EditorEx) { ((EditorEx)editor).reinitSettings(); } + + editor.getScrollingModel().disableAnimation(); + editor.getScrollingModel().scrollVertically(editor.logicalPositionToXY(anchorPosition).y + intraLineShift); + editor.getScrollingModel().enableAnimation(); } @Nullable