|
|
|
@ -214,9 +214,9 @@ namespace Avalonia.Controls |
|
|
|
if (!_ignoreTextChanges) |
|
|
|
{ |
|
|
|
var caretIndex = CaretIndex; |
|
|
|
SelectionStart = CoerceCaretIndex(SelectionStart, value?.Length ?? 0); |
|
|
|
SelectionEnd = CoerceCaretIndex(SelectionEnd, value?.Length ?? 0); |
|
|
|
CaretIndex = CoerceCaretIndex(caretIndex, value?.Length ?? 0); |
|
|
|
SelectionStart = CoerceCaretIndex(SelectionStart, value); |
|
|
|
SelectionEnd = CoerceCaretIndex(SelectionEnd, value); |
|
|
|
CaretIndex = CoerceCaretIndex(caretIndex, value); |
|
|
|
|
|
|
|
if (SetAndRaise(TextProperty, ref _text, value) && !_isUndoingRedoing) |
|
|
|
{ |
|
|
|
@ -677,11 +677,15 @@ namespace Avalonia.Controls |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private int CoerceCaretIndex(int value) => CoerceCaretIndex(value, Text?.Length ?? 0); |
|
|
|
private int CoerceCaretIndex(int value) => CoerceCaretIndex(value, Text); |
|
|
|
|
|
|
|
private int CoerceCaretIndex(int value, int length) |
|
|
|
private int CoerceCaretIndex(int value, string text) |
|
|
|
{ |
|
|
|
var text = Text; |
|
|
|
if (text == null) |
|
|
|
{ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
var length = text.Length; |
|
|
|
|
|
|
|
if (value < 0) |
|
|
|
{ |
|
|
|
@ -691,7 +695,7 @@ namespace Avalonia.Controls |
|
|
|
{ |
|
|
|
return length; |
|
|
|
} |
|
|
|
else if (value > 0 && text[value - 1] == '\r' && text[value] == '\n') |
|
|
|
else if (value > 0 && text[value - 1] == '\r' && value < length && text[value] == '\n') |
|
|
|
{ |
|
|
|
return value + 1; |
|
|
|
} |
|
|
|
|