diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorCoordinateMapper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorCoordinateMapper.java index 8aa58807f701..335e00aa3ccb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorCoordinateMapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorCoordinateMapper.java @@ -242,6 +242,9 @@ class EditorCoordinateMapper { int maxOffset = 0; for (VisualLineFragmentsIterator.Fragment fragment : VisualLineFragmentsIterator.create(myView, visualLineStartOffset, false)) { if (p.x <= fragment.getStartX()) { + if (fragment.getStartVisualColumn() == 0) { + return new VisualPosition(visualLine, 0); + } int markerWidth = myView.getEditor().getSoftWrapModel().getMinDrawingWidthInPixels(SoftWrapDrawingType.AFTER_SOFT_WRAP); float indent = fragment.getStartX() - markerWidth; if (p.x <= indent) { diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorImplTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorImplTest.java index c539c5bd79a0..95fab8bce878 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorImplTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorImplTest.java @@ -22,7 +22,9 @@ import com.intellij.openapi.editor.FoldRegion; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.VisualPosition; import com.intellij.openapi.editor.ex.DocumentEx; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.util.EditorUtil; +import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.testFramework.EditorTestUtil; import java.awt.*; @@ -230,4 +232,11 @@ public class EditorImplTest extends AbstractEditorTest { mouse().clickAt(0, 10); assertEquals(new VisualPosition(0, 7), myEditor.getCaretModel().getVisualPosition()); } + + public void testXYToVisualPositionWhenPrefixIsSet() throws Exception { + initText("abc"); + configureSoftWraps(1000); // to make sure soft wrap character width is properly mocked + ((EditorEx)myEditor).setPrefixTextAndAttributes(">", new TextAttributes()); + assertEquals(new VisualPosition(0, 0), myEditor.xyToVisualPosition(new Point(1, 0))); + } }