From be149cbd315d807c15b26e5b66c4b4cd9bb88750 Mon Sep 17 00:00:00 2001 From: Tom Edwards <109803929+TomEdwardsEnscape@users.noreply.github.com> Date: Mon, 26 May 2025 09:50:19 +0200 Subject: [PATCH] Fixed focus not being cleared when a parent of the focused element is hidden (#18916) Enabled the relevant test --- src/Avalonia.Base/Input/InputElement.cs | 14 ++++++++++++-- .../Input/InputElement_Focus.cs | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Base/Input/InputElement.cs b/src/Avalonia.Base/Input/InputElement.cs index 3afc42bd02..20f510efa6 100644 --- a/src/Avalonia.Base/Input/InputElement.cs +++ b/src/Avalonia.Base/Input/InputElement.cs @@ -706,9 +706,19 @@ namespace Avalonia.Input { PseudoClasses.Set(":focus-within", change.GetNewValue()); } - else if (change.Property == IsVisibleProperty && !change.GetNewValue() && IsFocused) + else if (change.Property == IsVisibleProperty) { - FocusManager.GetFocusManager(this)?.ClearFocus(); + if (!change.GetNewValue() && IsKeyboardFocusWithin && FocusManager.GetFocusManager(this) is { } focusManager) + { + if (focusManager.GetFocusedElement() is { } focusedElement && VisualParent != null) + { + focusManager.ClearFocusOnElementRemoved(focusedElement, VisualParent); + } + else + { + focusManager.ClearFocus(); + } + } } } diff --git a/tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs b/tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs index 85d2be077f..69cc3dbc22 100644 --- a/tests/Avalonia.Base.UnitTests/Input/InputElement_Focus.cs +++ b/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;