Browse Source

Adjust remaining InputMethodImpl

Benedikt Stebner 3 years ago
parent
commit
5c37405259

+ 1 - 1
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; }
 

+ 6 - 1
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();
         }
 

+ 6 - 1
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();
             }
 

+ 9 - 2
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 - 0
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; }