Browse Source
Fix: Unable to input numbers, symbols, and English letters in Avalonia on X11 with fcitx5 ForwardKey messages (#19207)
pull/19227/head
SeWZC
7 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with
25 additions and
11 deletions
-
src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs
-
src/Avalonia.FreeDesktop/IX11InputMethod.cs
-
src/Avalonia.X11/X11Window.Ime.cs
|
|
|
@ -180,13 +180,15 @@ namespace Avalonia.FreeDesktop.DBusIme.Fcitx |
|
|
|
mods |= KeyModifiers.Shift; |
|
|
|
if (state.HasAllFlags(FcitxKeyState.FcitxKeyState_Super)) |
|
|
|
mods |= KeyModifiers.Meta; |
|
|
|
var isPressKey = ev.type == (int)FcitxKeyEventType.FCITX_PRESS_KEY; |
|
|
|
FireForward(new X11InputMethodForwardedKey |
|
|
|
{ |
|
|
|
Modifiers = mods, |
|
|
|
KeyVal = (int)ev.keyval, |
|
|
|
Type = ev.type == (int)FcitxKeyEventType.FCITX_PRESS_KEY ? |
|
|
|
Type = isPressKey ? |
|
|
|
RawKeyEventType.KeyDown : |
|
|
|
RawKeyEventType.KeyUp |
|
|
|
RawKeyEventType.KeyUp, |
|
|
|
WithText = isPressKey, |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -18,6 +18,7 @@ namespace Avalonia.FreeDesktop |
|
|
|
public int KeyVal { get; set; } |
|
|
|
public KeyModifiers Modifiers { get; set; } |
|
|
|
public RawKeyEventType Type { get; set; } |
|
|
|
public bool WithText { get; set; } |
|
|
|
} |
|
|
|
|
|
|
|
internal interface IX11InputMethodControl : IDisposable |
|
|
|
|
|
|
|
@ -88,15 +88,26 @@ namespace Avalonia.X11 |
|
|
|
var x11Key = (X11Key)forwardedKey.KeyVal; |
|
|
|
var keySymbol = _x11.HasXkb ? GetKeySymbolXkb(x11Key) : GetKeySymbolXCore(x11Key); |
|
|
|
|
|
|
|
ScheduleInput(new RawKeyEventArgs( |
|
|
|
_keyboard, |
|
|
|
(ulong)_x11.LastActivityTimestamp.ToInt64(), |
|
|
|
InputRoot, |
|
|
|
forwardedKey.Type, |
|
|
|
X11KeyTransform.KeyFromX11Key(x11Key), |
|
|
|
(RawInputModifiers)forwardedKey.Modifiers, |
|
|
|
PhysicalKey.None, |
|
|
|
keySymbol)); |
|
|
|
ScheduleInput(forwardedKey.WithText ? |
|
|
|
new RawKeyEventArgsWithText( |
|
|
|
_keyboard, |
|
|
|
(ulong)_x11.LastActivityTimestamp.ToInt64(), |
|
|
|
InputRoot, |
|
|
|
forwardedKey.Type, |
|
|
|
X11KeyTransform.KeyFromX11Key(x11Key), |
|
|
|
(RawInputModifiers)forwardedKey.Modifiers, |
|
|
|
PhysicalKey.None, |
|
|
|
keySymbol, |
|
|
|
keySymbol) : |
|
|
|
new RawKeyEventArgs( |
|
|
|
_keyboard, |
|
|
|
(ulong)_x11.LastActivityTimestamp.ToInt64(), |
|
|
|
InputRoot, |
|
|
|
forwardedKey.Type, |
|
|
|
X11KeyTransform.KeyFromX11Key(x11Key), |
|
|
|
(RawInputModifiers)forwardedKey.Modifiers, |
|
|
|
PhysicalKey.None, |
|
|
|
keySymbol)); |
|
|
|
} |
|
|
|
|
|
|
|
private void UpdateImePosition() => _imeControl?.UpdateWindowInfo(_position ?? default, RenderScaling); |
|
|
|
|