Browse Source

Adjust remaining InputMethodImpl

feature/ImePreeditText
Benedikt Stebner 4 years ago
parent
commit
5c37405259
  1. 2
      src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs
  2. 7
      src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs
  3. 7
      src/Avalonia.X11/X11Window.Xim.cs
  4. 11
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs
  5. 2
      src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs

2
src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs

@ -5,7 +5,7 @@ namespace Avalonia.Input.TextInput
[Unstable] [Unstable]
public interface ITextInputMethodImpl public interface ITextInputMethodImpl
{ {
ITextInputMethodClient Client { get; } ITextInputMethodClient? Client { get; }
bool IsActive { get; } bool IsActive { get; }

7
src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs

@ -40,6 +40,7 @@ namespace Avalonia.FreeDesktop.DBusIme
private PixelRect? _lastReportedRect; private PixelRect? _lastReportedRect;
private double _scaling = 1; private double _scaling = 1;
private PixelPoint _windowPosition; private PixelPoint _windowPosition;
private ITextInputMethodClient? _client;
protected bool IsConnected => _currentName != null; protected bool IsConnected => _currentName != null;
@ -51,6 +52,10 @@ namespace Avalonia.FreeDesktop.DBusIme
Watch(); Watch();
} }
public ITextInputMethodClient Client => _client;
public bool IsActive => _client != null;
async void Watch() async void Watch()
{ {
foreach (var name in _knownNames) foreach (var name in _knownNames)
@ -202,7 +207,7 @@ namespace Avalonia.FreeDesktop.DBusIme
void ITextInputMethodImpl.SetClient(ITextInputMethodClient? client) void ITextInputMethodImpl.SetClient(ITextInputMethodClient? client)
{ {
_controlActive = client is { }; _client = client;
UpdateActive(); UpdateActive();
} }

7
src/Avalonia.X11/X11Window.Xim.cs

@ -15,11 +15,16 @@ namespace Avalonia.X11
private readonly X11Window _parent; private readonly X11Window _parent;
private bool _controlActive, _windowActive, _imeActive; private bool _controlActive, _windowActive, _imeActive;
private Rect? _queuedCursorRect; private Rect? _queuedCursorRect;
private ITextInputMethodClient? _client;
public XimInputMethod(X11Window parent) public XimInputMethod(X11Window parent)
{ {
_parent = parent; _parent = parent;
} }
public ITextInputMethodClient? Client => _client;
public bool IsActive => _client != null;
public void SetCursorRect(Rect rect) public void SetCursorRect(Rect rect)
{ {
@ -59,7 +64,7 @@ namespace Avalonia.X11
public void SetClient(ITextInputMethodClient client) public void SetClient(ITextInputMethodClient client)
{ {
_controlActive = client is { }; _client = client;
UpdateActive(); UpdateActive();
} }

11
src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs

@ -46,6 +46,9 @@ namespace Avalonia.Web.Blazor
private bool _useGL; private bool _useGL;
private bool _inputElementFocused; private bool _inputElementFocused;
private ITextInputMethodClient? _client;
[Inject] private IJSRuntime Js { get; set; } = null!; [Inject] private IJSRuntime Js { get; set; } = null!;
public AvaloniaView() public AvaloniaView()
@ -60,6 +63,10 @@ namespace Avalonia.Web.Blazor
} }
} }
public ITextInputMethodClient? Client => _client;
public bool IsActive => _client != null;
internal INativeControlHostImpl GetNativeControlHostImpl() internal INativeControlHostImpl GetNativeControlHostImpl()
{ {
return _nativeControlHost ?? throw new InvalidOperationException("Blazor View wasn't initialized yet"); return _nativeControlHost ?? throw new InvalidOperationException("Blazor View wasn't initialized yet");
@ -391,9 +398,9 @@ namespace Avalonia.Web.Blazor
_inputHelper.Clear(); _inputHelper.Clear();
var active = client is { }; _client = client;
if (active) if (IsActive)
{ {
_inputHelper.Show(); _inputHelper.Show();
_inputElementFocused = true; _inputElementFocused = true;

2
src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs

@ -23,6 +23,8 @@ namespace Avalonia.Win32.Input
private ushort _langId; private ushort _langId;
private const int _caretMargin = 1; private const int _caretMargin = 1;
public ITextInputMethodClient Client => _client;
public bool IsActive => _client != null; public bool IsActive => _client != null;
public bool IsComposing { get; set; } public bool IsComposing { get; set; }

Loading…
Cancel
Save