|
|
@@ -573,15 +573,15 @@ namespace Avalonia.Controls
|
|
|
switch (e.Key)
|
|
|
{
|
|
|
case Key.Left:
|
|
|
- MoveHorizontal(-1, hasWholeWordModifiers);
|
|
|
- movement = true;
|
|
|
selection = DetectSelection();
|
|
|
+ MoveHorizontal(-1, hasWholeWordModifiers, selection);
|
|
|
+ movement = true;
|
|
|
break;
|
|
|
|
|
|
case Key.Right:
|
|
|
- MoveHorizontal(1, hasWholeWordModifiers);
|
|
|
- movement = true;
|
|
|
selection = DetectSelection();
|
|
|
+ MoveHorizontal(1, hasWholeWordModifiers, selection);
|
|
|
+ movement = true;
|
|
|
break;
|
|
|
|
|
|
case Key.Up:
|
|
|
@@ -826,13 +826,21 @@ namespace Avalonia.Controls
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- private void MoveHorizontal(int direction, bool wholeWord)
|
|
|
+ private void MoveHorizontal(int direction, bool wholeWord, bool isSelecting)
|
|
|
{
|
|
|
var text = Text ?? string.Empty;
|
|
|
var caretIndex = CaretIndex;
|
|
|
|
|
|
if (!wholeWord)
|
|
|
{
|
|
|
+ if (SelectionStart != SelectionEnd && !isSelecting)
|
|
|
+ {
|
|
|
+ var start = Math.Min(SelectionStart, SelectionEnd);
|
|
|
+ var end = Math.Max(SelectionStart, SelectionEnd);
|
|
|
+ CaretIndex = direction < 0 ? start : end;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
var index = caretIndex + direction;
|
|
|
|
|
|
if (index < 0 || index > text.Length)
|
|
|
@@ -1049,14 +1057,14 @@ namespace Avalonia.Controls
|
|
|
private void SetSelectionForControlBackspace()
|
|
|
{
|
|
|
SelectionStart = CaretIndex;
|
|
|
- MoveHorizontal(-1, true);
|
|
|
+ MoveHorizontal(-1, true, false);
|
|
|
SelectionEnd = CaretIndex;
|
|
|
}
|
|
|
|
|
|
private void SetSelectionForControlDelete()
|
|
|
{
|
|
|
SelectionStart = CaretIndex;
|
|
|
- MoveHorizontal(1, true);
|
|
|
+ MoveHorizontal(1, true, false);
|
|
|
SelectionEnd = CaretIndex;
|
|
|
}
|
|
|
|