Browse Source

Merge pull request #1357 from sdoroff/text-box-key-down-change

Altered OnKeyDown to accurately set handled
pull/1293/merge
Jeremy Koritzinsky 9 years ago
committed by GitHub
parent
commit
6b3946abec
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 37
      src/Avalonia.Controls/TextBox.cs

37
src/Avalonia.Controls/TextBox.cs

@ -325,7 +325,7 @@ namespace Avalonia.Controls
string text = Text ?? string.Empty; string text = Text ?? string.Empty;
int caretIndex = CaretIndex; int caretIndex = CaretIndex;
bool movement = false; bool movement = false;
bool handled = true; bool handled = false;
var modifiers = e.Modifiers; var modifiers = e.Modifiers;
switch (e.Key) switch (e.Key)
@ -334,13 +334,14 @@ namespace Avalonia.Controls
if (modifiers == InputModifiers.Control) if (modifiers == InputModifiers.Control)
{ {
SelectAll(); SelectAll();
handled = true;
} }
break; break;
case Key.C: case Key.C:
if (modifiers == InputModifiers.Control) if (modifiers == InputModifiers.Control)
{ {
Copy(); Copy();
handled = true;
} }
break; break;
@ -349,6 +350,7 @@ namespace Avalonia.Controls
{ {
Copy(); Copy();
DeleteSelection(); DeleteSelection();
handled = true;
} }
break; break;
@ -356,19 +358,24 @@ namespace Avalonia.Controls
if (modifiers == InputModifiers.Control) if (modifiers == InputModifiers.Control)
{ {
Paste(); Paste();
handled = true;
} }
break; break;
case Key.Z: case Key.Z:
if (modifiers == InputModifiers.Control) if (modifiers == InputModifiers.Control)
{
_undoRedoHelper.Undo(); _undoRedoHelper.Undo();
handled = true;
}
break; break;
case Key.Y: case Key.Y:
if (modifiers == InputModifiers.Control) if (modifiers == InputModifiers.Control)
{
_undoRedoHelper.Redo(); _undoRedoHelper.Redo();
handled = true;
}
break; break;
case Key.Left: case Key.Left:
MoveHorizontal(-1, modifiers); MoveHorizontal(-1, modifiers);
@ -381,13 +388,11 @@ namespace Avalonia.Controls
break; break;
case Key.Up: case Key.Up:
MoveVertical(-1, modifiers); movement = MoveVertical(-1, modifiers);
movement = true;
break; break;
case Key.Down: case Key.Down:
MoveVertical(1, modifiers); movement = MoveVertical(1, modifiers);
movement = true;
break; break;
case Key.Home: case Key.Home:
@ -423,7 +428,7 @@ namespace Avalonia.Controls
CaretIndex -= removedCharacters; CaretIndex -= removedCharacters;
SelectionStart = SelectionEnd = CaretIndex; SelectionStart = SelectionEnd = CaretIndex;
} }
handled = true;
break; break;
case Key.Delete: case Key.Delete:
@ -447,13 +452,14 @@ namespace Avalonia.Controls
SetTextInternal(text.Substring(0, caretIndex) + text.Substring(caretIndex + removedCharacters)); SetTextInternal(text.Substring(0, caretIndex) + text.Substring(caretIndex + removedCharacters));
} }
handled = true;
break; break;
case Key.Enter: case Key.Enter:
if (AcceptsReturn) if (AcceptsReturn)
{ {
HandleTextInput("\r\n"); HandleTextInput("\r\n");
handled = true;
} }
break; break;
@ -462,11 +468,11 @@ namespace Avalonia.Controls
if (AcceptsTab) if (AcceptsTab)
{ {
HandleTextInput("\t"); HandleTextInput("\t");
handled = true;
} }
else else
{ {
base.OnKeyDown(e); base.OnKeyDown(e);
handled = false;
} }
break; break;
@ -485,7 +491,7 @@ namespace Avalonia.Controls
SelectionStart = SelectionEnd = CaretIndex; SelectionStart = SelectionEnd = CaretIndex;
} }
if (handled) if (handled || movement)
{ {
e.Handled = true; e.Handled = true;
} }
@ -662,7 +668,7 @@ namespace Avalonia.Controls
} }
} }
private void MoveVertical(int count, InputModifiers modifiers) private bool MoveVertical(int count, InputModifiers modifiers)
{ {
var formattedText = _presenter.FormattedText; var formattedText = _presenter.FormattedText;
var lines = formattedText.GetLines().ToList(); var lines = formattedText.GetLines().ToList();
@ -677,6 +683,11 @@ namespace Avalonia.Controls
var point = new Point(rect.X, y + (count * (line.Height / 2))); var point = new Point(rect.X, y + (count * (line.Height / 2)));
var hit = formattedText.HitTestPoint(point); var hit = formattedText.HitTestPoint(point);
CaretIndex = hit.TextPosition + (hit.IsTrailing ? 1 : 0); CaretIndex = hit.TextPosition + (hit.IsTrailing ? 1 : 0);
return true;
}
else
{
return false;
} }
} }

Loading…
Cancel
Save