Browse Source

Merge branch 'master' into context-request-keyboard

pull/6059/head
Max Katz 5 years ago
committed by GitHub
parent
commit
368a747cdb
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 21
      src/Avalonia.Controls/TextBox.cs
  2. 2
      src/Avalonia.Native/WindowImpl.cs
  3. 29
      tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

21
src/Avalonia.Controls/TextBox.cs

@ -1098,6 +1098,11 @@ namespace Avalonia.Controls
private bool MoveVertical(int count) private bool MoveVertical(int count)
{ {
if (_presenter is null)
{
return false;
}
var formattedText = _presenter.FormattedText; var formattedText = _presenter.FormattedText;
var lines = formattedText.GetLines().ToList(); var lines = formattedText.GetLines().ToList();
var caretIndex = CaretIndex; var caretIndex = CaretIndex;
@ -1113,14 +1118,17 @@ namespace Avalonia.Controls
CaretIndex = hit.TextPosition + (hit.IsTrailing ? 1 : 0); CaretIndex = hit.TextPosition + (hit.IsTrailing ? 1 : 0);
return true; return true;
} }
else
{ return false;
return false;
}
} }
private void MoveHome(bool document) private void MoveHome(bool document)
{ {
if (_presenter is null)
{
return;
}
var text = Text ?? string.Empty; var text = Text ?? string.Empty;
var caretIndex = CaretIndex; var caretIndex = CaretIndex;
@ -1151,6 +1159,11 @@ namespace Avalonia.Controls
private void MoveEnd(bool document) private void MoveEnd(bool document)
{ {
if (_presenter is null)
{
return;
}
var text = Text ?? string.Empty; var text = Text ?? string.Empty;
var caretIndex = CaretIndex; var caretIndex = CaretIndex;

2
src/Avalonia.Native/WindowImpl.cs

@ -114,7 +114,7 @@ namespace Avalonia.Native
{ {
var visual = (_inputRoot as Window).Renderer.HitTestFirst(e.Position, _inputRoot as Window, x => var visual = (_inputRoot as Window).Renderer.HitTestFirst(e.Position, _inputRoot as Window, x =>
{ {
if (x is IInputElement ie && !ie.IsHitTestVisible) if (x is IInputElement ie && (!ie.IsHitTestVisible || !ie.IsVisible))
{ {
return false; return false;
} }

29
tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

@ -8,6 +8,7 @@ using Avalonia.Controls.Templates;
using Avalonia.Data; using Avalonia.Data;
using Avalonia.Input; using Avalonia.Input;
using Avalonia.Input.Platform; using Avalonia.Input.Platform;
using Avalonia.Layout;
using Avalonia.Media; using Avalonia.Media;
using Avalonia.Platform; using Avalonia.Platform;
using Avalonia.UnitTests; using Avalonia.UnitTests;
@ -556,6 +557,31 @@ namespace Avalonia.Controls.UnitTests
Assert.True(true); Assert.True(true);
} }
} }
[Theory]
[InlineData(Key.Up)]
[InlineData(Key.Down)]
[InlineData(Key.Home)]
[InlineData(Key.End)]
public void Textbox_doesnt_crash_when_Receives_input_and_template_not_applied(Key key)
{
using (UnitTestApplication.Start(FocusServices))
{
var target1 = new TextBox
{
Template = CreateTemplate(),
Text = "1234",
IsVisible = false
};
var root = new TestRoot { Child = target1 };
target1.Focus();
Assert.True(target1.IsFocused);
RaiseKeyEvent(target1, key, KeyModifiers.None);
}
}
[Fact] [Fact]
public void TextBox_GotFocus_And_LostFocus_Work_Properly() public void TextBox_GotFocus_And_LostFocus_Work_Properly()
@ -763,6 +789,9 @@ namespace Avalonia.Controls.UnitTests
keyboardDevice: () => new KeyboardDevice(), keyboardDevice: () => new KeyboardDevice(),
keyboardNavigation: new KeyboardNavigationHandler(), keyboardNavigation: new KeyboardNavigationHandler(),
inputManager: new InputManager(), inputManager: new InputManager(),
renderInterface: new MockPlatformRenderInterface(),
fontManagerImpl: new MockFontManagerImpl(),
textShaperImpl: new MockTextShaperImpl(),
standardCursorFactory: Mock.Of<ICursorFactory>()); standardCursorFactory: Mock.Of<ICursorFactory>());
private static TestServices Services => TestServices.MockThreadingInterface.With( private static TestServices Services => TestServices.MockThreadingInterface.With(

Loading…
Cancel
Save