Browse Source

clear composition region when presenter is changed

pull/10328/head
Emmanuel Hansen 4 years ago
parent
commit
ad56e9d20b
  1. 10
      src/Android/Avalonia.Android/AndroidInputMethod.cs
  2. 21
      src/Android/Avalonia.Android/InputEditable.cs
  3. 2
      src/Avalonia.Controls/TextBoxTextInputMethodClient.cs

10
src/Android/Avalonia.Android/AndroidInputMethod.cs

@ -70,11 +70,6 @@ namespace Avalonia.Android
public void SetClient(ITextInputMethodClient client)
{
if(_inputConnection!= null)
{
(_inputConnection.InputEditable as IDisposable)?.Dispose();
}
_client = client;
if (IsActive)
@ -139,11 +134,6 @@ namespace Avalonia.Android
outAttrs.ImeOptions |= ImeFlags.NoFullscreen | ImeFlags.NoExtractUi;
if(_client.TextViewVisual is TextPresenter presenter)
{
_inputConnection?.InputEditable.SetPresenter(presenter);
}
_client.TextEditable = _inputConnection.InputEditable;
return _inputConnection;

21
src/Android/Avalonia.Android/InputEditable.cs

@ -13,7 +13,7 @@ using static System.Net.Mime.MediaTypeNames;
namespace Avalonia.Android
{
internal class InputEditable : SpannableStringBuilder, IDisposable, ITextEditable
internal class InputEditable : SpannableStringBuilder, ITextEditable
{
private readonly TopLevelImpl _topLevel;
private readonly IAndroidInputMethod _inputMethod;
@ -22,7 +22,6 @@ namespace Avalonia.Android
private string _previousText;
private int _previousSelectionStart;
private int _previousSelectionEnd;
private TextPresenter _presenter;
public event EventHandler TextChanged;
public event EventHandler SelectionChanged;
@ -55,9 +54,6 @@ namespace Avalonia.Android
{
}
public TextPresenter Presenter { get => _presenter; }
public int SelectionStart
{
get => Selection.GetSelectionStart(this); set
@ -107,7 +103,7 @@ namespace Avalonia.Android
public void EndBatchEdit()
{
if (_currentBatchLevel == 1 && _presenter != null)
if (_currentBatchLevel == 1)
{
if(_previousText != Text)
{
@ -127,18 +123,5 @@ namespace Avalonia.Android
{
CompositionChanged?.Invoke(this, EventArgs.Empty);
}
void IDisposable.Dispose()
{
_presenter = null;
}
public void SetPresenter(TextPresenter presenter)
{
if (_presenter == null)
{
_presenter = presenter;
}
}
}
}

2
src/Avalonia.Controls/TextBoxTextInputMethodClient.cs

@ -216,6 +216,8 @@ namespace Avalonia.Controls
{
_presenter.PreeditText = null;
_presenter.CompositionRegion = null;
_presenter.CaretBoundsChanged -= OnCaretBoundsChanged;
}

Loading…
Cancel
Save