Browse Source

Fix use of CoerceCaretIndex on Text change

pull/2553/head
ahopper 7 years ago
parent
commit
c72195f45b
  1. 18
      src/Avalonia.Controls/TextBox.cs

18
src/Avalonia.Controls/TextBox.cs

@ -214,9 +214,9 @@ namespace Avalonia.Controls
if (!_ignoreTextChanges) if (!_ignoreTextChanges)
{ {
var caretIndex = CaretIndex; var caretIndex = CaretIndex;
SelectionStart = CoerceCaretIndex(SelectionStart, value?.Length ?? 0); SelectionStart = CoerceCaretIndex(SelectionStart, value);
SelectionEnd = CoerceCaretIndex(SelectionEnd, value?.Length ?? 0); SelectionEnd = CoerceCaretIndex(SelectionEnd, value);
CaretIndex = CoerceCaretIndex(caretIndex, value?.Length ?? 0); CaretIndex = CoerceCaretIndex(caretIndex, value);
if (SetAndRaise(TextProperty, ref _text, value) && !_isUndoingRedoing) 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) if (value < 0)
{ {
@ -691,7 +695,7 @@ namespace Avalonia.Controls
{ {
return length; 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; return value + 1;
} }

Loading…
Cancel
Save