From 2edc2ec425c4b1373e08204d7ab01448ca48bca7 Mon Sep 17 00:00:00 2001 From: Lobster Uberlord Date: Thu, 23 Jun 2022 02:42:15 +0700 Subject: [PATCH] Prevent input focus leaving the TextBox on first click --- src/Web/Avalonia.Web.Blazor/AvaloniaView.razor | 3 ++- src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor b/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor index 68662bd931..b501db16d3 100644 --- a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor +++ b/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor @@ -5,7 +5,8 @@ @onpointerdown="OnPointerDown" @onpointerup="OnPointerUp" @onpointermove="OnPointerMove" - @onpointercancel="OnPointerCancel"> + @onpointercancel="OnPointerCancel" + @onfocus="OnFocus"> diff --git a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs b/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs index b575bc6dbb..d42529985b 100644 --- a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs +++ b/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs @@ -37,6 +37,7 @@ namespace Avalonia.Web.Blazor private const SKColorType ColorType = SKColorType.Rgba8888; private bool _initialised; + private bool _inputElementFocused; [Inject] private IJSRuntime Js { get; set; } = null!; @@ -221,6 +222,16 @@ namespace Avalonia.Web.Blazor _topLevelImpl.RawKeyboardEvent(RawKeyEventType.KeyUp, e.Code, e.Key, GetModifiers(e)); } + private void OnFocus(FocusEventArgs e) + { + // if focus has unexpectedly moved from the input element to the container element, + // shift it back to the input element + if (_inputElementFocused && _inputHelper is not null) + { + _inputHelper.Focus(); + } + } + private void OnInput(ChangeEventArgs e) { if (e.Value != null) @@ -374,10 +385,12 @@ namespace Avalonia.Web.Blazor if (active) { _inputHelper.Show(); + _inputElementFocused = true; _inputHelper.Focus(); } else { + _inputElementFocused = false; _inputHelper.Hide(); } }