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; }