Browse Source

select current composing region if active when commiting and ensure selection is set when surrounding text changes

pull/12270/head
Emmanuel Hansen 3 years ago
parent
commit
a54163f1c1
  1. 7
      src/Android/Avalonia.Android/AndroidInputMethod.cs
  2. 7
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

7
src/Android/Avalonia.Android/AndroidInputMethod.cs

@ -150,6 +150,13 @@ namespace Avalonia.Android
_inputConnection.Editable.Replace(diff.index, editableText.Length, diff.diff); _inputConnection.Editable.Replace(diff.index, editableText.Length, diff.diff);
_inputConnection.EditableWrapper.IgnoreChange = false; _inputConnection.EditableWrapper.IgnoreChange = false;
if(diff.index == 0)
{
var selection = _client.Selection;
_client.Selection = new TextSelection(selection.Start, 0);
_client.Selection = selection;
}
} }
(int index, string diff) GetDiff() (int index, string diff) GetDiff()

7
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@ -571,8 +571,15 @@ namespace Avalonia.Android.Platform.SkiaPlatform
BeginBatchEdit(); BeginBatchEdit();
_commitInProgress = true; _commitInProgress = true;
var composingRegion = _editable.CurrentComposition;
var ret = base.CommitText(text, newCursorPosition); var ret = base.CommitText(text, newCursorPosition);
if(composingRegion.Start != -1)
{
InputMethod.Client.Selection = composingRegion;
}
var committedText = text.SubSequence(0, text.Length()); var committedText = text.SubSequence(0, text.Length());
if (_inputMethod.IsActive) if (_inputMethod.IsActive)

Loading…
Cancel
Save