From 5c7659358f9a6a3f5488d3f7b21f8930c6365187 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Thu, 21 Sep 2023 14:11:43 -0700 Subject: [PATCH] Merge pull request #12970 from Gillibald/fixes/browserIme [Browser] [IME] Fix event handling --- src/Browser/Avalonia.Browser/AvaloniaView.cs | 20 ++++++++----------- .../Avalonia.Browser/Interop/InputHelper.cs | 2 -- .../webapp/modules/avalonia/input.ts | 12 ----------- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/src/Browser/Avalonia.Browser/AvaloniaView.cs b/src/Browser/Avalonia.Browser/AvaloniaView.cs index 0b88d9c3e9..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"); @@ -429,8 +418,15 @@ namespace Avalonia.Browser return false; IsComposing = false; + _client.SetPreeditText(null); - _topLevelImpl.RawTextEvent(args.GetPropertyAsString("data")!); + + 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>] 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);