Browse Source

fix text selection handles crash on reattach to visual tree (#14096)

Co-authored-by: Tim <47110241+timunie@users.noreply.github.com>
pull/14168/head
Emmanuel Hansen 2 years ago
committed by GitHub
parent
commit
c8bd858e18
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      src/Avalonia.Controls/Presenters/TextPresenter.cs
  2. 2
      src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs

20
src/Avalonia.Controls/Presenters/TextPresenter.cs

@ -595,12 +595,6 @@ namespace Avalonia.Controls.Presenters
InvalidateMeasure();
}
protected override void OnLoaded(RoutedEventArgs e)
{
base.OnLoaded(e);
EnsureTextSelectionLayer();
}
protected override Size MeasureOverride(Size availableSize)
{
_constraint = availableSize;
@ -894,8 +888,7 @@ namespace Avalonia.Controls.Presenters
ResetCaretTimer();
if (TextSelectionHandleCanvas is { } canvas && _layer != null && !_layer.Children.Contains(canvas))
_layer?.Add(TextSelectionHandleCanvas);
EnsureTextSelectionLayer();
}
private void EnsureTextSelectionLayer()
@ -903,10 +896,17 @@ namespace Avalonia.Controls.Presenters
if (TextSelectionHandleCanvas == null)
{
TextSelectionHandleCanvas = new TextSelectionHandleCanvas();
TextSelectionHandleCanvas.SetPresenter(this);
}
TextSelectionHandleCanvas.SetPresenter(this);
_layer = TextSelectorLayer.GetTextSelectorLayer(this);
if (_layer != null && !_layer.Children.Contains(TextSelectionHandleCanvas))
if (TextSelectionHandleCanvas.VisualParent is { } parent && parent != _layer)
{
if (parent is TextSelectorLayer l)
{
l.Remove(TextSelectionHandleCanvas);
}
}
if (_layer != null && TextSelectionHandleCanvas.VisualParent != _layer)
_layer?.Add(TextSelectionHandleCanvas);
}

2
src/Avalonia.Controls/Primitives/TextSelectionCanvas.cs

@ -250,6 +250,8 @@ namespace Avalonia.Controls.Primitives
internal void SetPresenter(TextPresenter? textPresenter)
{
if (_presenter == textPresenter)
return;
_presenter = textPresenter;
if (_presenter != null)
{

Loading…
Cancel
Save