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]
public interface ITextInputMethodImpl
{
ITextInputMethodClient Client { get; }
ITextInputMethodClient? Client { get; }
bool IsActive { get; }

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

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

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

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

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

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

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

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

Loading…
Cancel
Save