Browse Source

Fixed focus not being cleared when a parent of the focused element is hidden (#18916)

Enabled the relevant test
release/11.3.1
Tom Edwards 9 months ago
committed by Julien Lebosquain
parent
commit
be149cbd31
  1. 14
      src/Avalonia.Base/Input/InputElement.cs
  2. 2
      tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs

14
src/Avalonia.Base/Input/InputElement.cs

@ -706,9 +706,19 @@ namespace Avalonia.Input
{
PseudoClasses.Set(":focus-within", change.GetNewValue<bool>());
}
else if (change.Property == IsVisibleProperty && !change.GetNewValue<bool>() && IsFocused)
else if (change.Property == IsVisibleProperty)
{
FocusManager.GetFocusManager(this)?.ClearFocus();
if (!change.GetNewValue<bool>() && IsKeyboardFocusWithin && FocusManager.GetFocusManager(this) is { } focusManager)
{
if (focusManager.GetFocusedElement() is { } focusedElement && VisualParent != null)
{
focusManager.ClearFocusOnElementRemoved(focusedElement, VisualParent);
}
else
{
focusManager.ClearFocus();
}
}
}
}

2
tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs

@ -203,7 +203,7 @@ namespace Avalonia.Base.UnitTests.Input
}
}
[Fact(Skip = "Need to implement IsEffectivelyVisible change notifications.")]
[Fact]
public void Focus_Should_Be_Cleared_When_Control_Is_Effectively_Hidden()
{
Border container;

Loading…
Cancel
Save