From 63f53386df8022a09278e0be73779ca737e8982e Mon Sep 17 00:00:00 2001 From: Chris Sung Date: Fri, 9 Feb 2024 00:52:39 +0900 Subject: [PATCH] Fix issue that breaking IME discards input buffer (#14433) Co-authored-by: Benedikt Stebner --- .../Avalonia.Win32/Input/Imm32InputMethod.cs | 14 +++++++++++++- .../Avalonia.Win32/WindowImpl.AppWndProc.cs | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs b/src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs index 49716f2dba..dc3b30adb4 100644 --- a/src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs +++ b/src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs @@ -334,11 +334,23 @@ namespace Avalonia.Win32.Input IsComposing = true; } - public void HandleCompositionEnd() + public void HandleCompositionEnd(uint timestamp) { //Cleanup composition state. IsComposing = false; + if (_parent != null && !string.IsNullOrEmpty(Composition)) + { + var e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, _parent.Owner, Composition); + + if (_parent.Input != null) + { + _parent.Input(e); + + _parent._ignoreWmChar = true; + } + } + Composition = null; if (IsActive) diff --git a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs index 30cca408b8..45104c221f 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs @@ -730,7 +730,7 @@ namespace Avalonia.Win32 } case WindowsMessage.WM_IME_ENDCOMPOSITION: { - Imm32InputMethod.Current.HandleCompositionEnd(); + Imm32InputMethod.Current.HandleCompositionEnd(timestamp); return IntPtr.Zero; }