From 5c37405259263c9f9a5f328ff9fa082357edbf5b Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Tue, 23 Aug 2022 08:41:26 +0200 Subject: [PATCH] Adjust remaining InputMethodImpl --- .../Input/TextInput/ITextInputMethodImpl.cs | 2 +- .../DBusIme/DBusTextInputMethodBase.cs | 7 ++++++- src/Avalonia.X11/X11Window.Xim.cs | 7 ++++++- src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs | 11 +++++++++-- src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs | 2 ++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs b/src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs index 34129b245c..6f6ef403f7 100644 --- a/src/Avalonia.Base/Input/TextInput/ITextInputMethodImpl.cs +++ b/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; } diff --git a/src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs b/src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs index eef865d458..899288b4a8 100644 --- a/src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs +++ b/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(); } diff --git a/src/Avalonia.X11/X11Window.Xim.cs b/src/Avalonia.X11/X11Window.Xim.cs index bedd1d22fc..10aece7f2e 100644 --- a/src/Avalonia.X11/X11Window.Xim.cs +++ b/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(); } diff --git a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs b/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs index 07db6013c7..157b28c88f 100644 --- a/src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs +++ b/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; diff --git a/src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs b/src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs index 9affb4fd5f..4f4da463c2 100644 --- a/src/Windows/Avalonia.Win32/Input/Imm32InputMethod.cs +++ b/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; }