Browse Source
Merge pull request #7374 from AvaloniaUI/fixes/5849-textinput-keydown-handed-2
win32: Don't raise TextInput event when KeyDown was handled (Attempt #2)
pull/7391/head
Dan Walmsley
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
12 additions and
2 deletions
-
src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs
-
src/Windows/Avalonia.Win32/WindowImpl.cs
|
|
|
@ -151,8 +151,8 @@ namespace Avalonia.Win32 |
|
|
|
} |
|
|
|
case WindowsMessage.WM_CHAR: |
|
|
|
{ |
|
|
|
// Ignore control chars
|
|
|
|
if (ToInt32(wParam) >= 32) |
|
|
|
// Ignore control chars and chars that were handled in WM_KEYDOWN.
|
|
|
|
if (ToInt32(wParam) >= 32 && !_ignoreWmChar) |
|
|
|
{ |
|
|
|
e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, _owner, |
|
|
|
new string((char)ToInt32(wParam), 1)); |
|
|
|
@ -519,6 +519,15 @@ namespace Avalonia.Win32 |
|
|
|
{ |
|
|
|
Input(e); |
|
|
|
|
|
|
|
if ((WindowsMessage)msg == WindowsMessage.WM_KEYDOWN) |
|
|
|
{ |
|
|
|
// Handling a WM_KEYDOWN message should cause the subsequent WM_CHAR message to
|
|
|
|
// be ignored. This should be safe to do as WM_CHAR should only be produced in
|
|
|
|
// response to the call to TranslateMessage/DispatchMessage after a WM_KEYDOWN
|
|
|
|
// is handled.
|
|
|
|
_ignoreWmChar = e.Handled; |
|
|
|
} |
|
|
|
|
|
|
|
if (e.Handled) |
|
|
|
{ |
|
|
|
return IntPtr.Zero; |
|
|
|
|
|
|
|
@ -90,6 +90,7 @@ namespace Avalonia.Win32 |
|
|
|
private bool _shown; |
|
|
|
private bool _hiddenWindowIsParent; |
|
|
|
private uint _langid; |
|
|
|
private bool _ignoreWmChar; |
|
|
|
|
|
|
|
public WindowImpl() |
|
|
|
{ |
|
|
|
|