From 969d6fd4b8ac79edbb01a7a53a1b6364755ab173 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Tue, 19 Sep 2023 14:57:32 +0200 Subject: [PATCH 1/3] Only raise text input via OnTextInput --- src/Browser/Avalonia.Browser/AvaloniaView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Browser/Avalonia.Browser/AvaloniaView.cs b/src/Browser/Avalonia.Browser/AvaloniaView.cs index 0b88d9c3e9..a70bbdb765 100644 --- a/src/Browser/Avalonia.Browser/AvaloniaView.cs +++ b/src/Browser/Avalonia.Browser/AvaloniaView.cs @@ -429,8 +429,8 @@ namespace Avalonia.Browser return false; IsComposing = false; + _client.SetPreeditText(null); - _topLevelImpl.RawTextEvent(args.GetPropertyAsString("data")!); return false; } From 5b1de54e8155a299ae716ef10a786726a43e71d0 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Thu, 21 Sep 2023 09:53:32 +0200 Subject: [PATCH 2/3] Don't handle the input event and instead work with CompositionEnd and KeyDow, KeyUp --- src/Browser/Avalonia.Browser/AvaloniaView.cs | 18 +++++++----------- .../Avalonia.Browser/Interop/InputHelper.cs | 2 -- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/Browser/Avalonia.Browser/AvaloniaView.cs b/src/Browser/Avalonia.Browser/AvaloniaView.cs index a70bbdb765..dde4746394 100644 --- a/src/Browser/Avalonia.Browser/AvaloniaView.cs +++ b/src/Browser/Avalonia.Browser/AvaloniaView.cs @@ -101,7 +101,6 @@ namespace Avalonia.Browser InputHelper.SubscribeTextEvents( _inputElement, OnBeforeInput, - OnTextInput, OnCompositionStart, OnCompositionUpdate, OnCompositionEnd); @@ -368,16 +367,6 @@ namespace Avalonia.Browser return _topLevelImpl.RawKeyboardEvent(RawKeyEventType.KeyUp, code, key, (RawInputModifiers)modifier); } - private bool OnTextInput (string type, string? data) - { - if(data == null || IsComposing) - { - return false; - } - - return _topLevelImpl.RawTextEvent(data); - } - private bool OnBeforeInput(JSObject arg, int start, int end) { var type = arg.GetPropertyAsString("inputType"); @@ -432,6 +421,13 @@ namespace Avalonia.Browser _client.SetPreeditText(null); + var text = args.GetPropertyAsString("data"); + + if(text != null) + { + return _topLevelImpl.RawTextEvent(text); + } + return false; } diff --git a/src/Browser/Avalonia.Browser/Interop/InputHelper.cs b/src/Browser/Avalonia.Browser/Interop/InputHelper.cs index 181bfabbe8..76dac84bca 100644 --- a/src/Browser/Avalonia.Browser/Interop/InputHelper.cs +++ b/src/Browser/Avalonia.Browser/Interop/InputHelper.cs @@ -20,8 +20,6 @@ internal static partial class InputHelper JSObject htmlElement, [JSMarshalAs>] Func onBeforeInput, - [JSMarshalAs>] - Func onInput, [JSMarshalAs>] Func onCompositionStart, [JSMarshalAs>] From 7e7f684cf04d4f6c9cd17cf83b56355fd44da456 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Thu, 21 Sep 2023 13:13:03 +0200 Subject: [PATCH 3/3] Cleanup input.ts --- .../webapp/modules/avalonia/input.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts b/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts index 77166e6f21..27a1d998fd 100644 --- a/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts +++ b/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts @@ -105,20 +105,9 @@ export class InputHelper { public static subscribeTextEvents( element: HTMLInputElement, beforeInputCallback: (args: InputEvent, start: number, end: number) => boolean, - inputCallback: (type: string, data: string | null) => boolean, compositionStartCallback: (args: CompositionEvent) => boolean, compositionUpdateCallback: (args: CompositionEvent) => boolean, compositionEndCallback: (args: CompositionEvent) => boolean) { - const inputHandler = (args: Event) => { - const inputEvent = args as InputEvent; - - // todo check cast - if (inputCallback(inputEvent.type, inputEvent.data)) { - args.preventDefault(); - } - }; - element.addEventListener("input", inputHandler); - const compositionStartHandler = (args: CompositionEvent) => { if (compositionStartCallback(args)) { args.preventDefault(); @@ -160,7 +149,6 @@ export class InputHelper { element.addEventListener("compositionend", compositionEndHandler); return () => { - element.removeEventListener("input", inputHandler); element.removeEventListener("compositionstart", compositionStartHandler); element.removeEventListener("compositionupdate", compositionUpdateHandler); element.removeEventListener("compositionend", compositionEndHandler);