IDEA-140013 Switching "Use Soft Wraps" option scrolls visible editor screen

This commit is contained in:
Dmitry Batrak
2015-05-15 14:00:20 +03:00
parent dc5d555b31
commit 4ae5a8337a
@@ -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 <code>'toggle soft wraps usage'</code> 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