Skip to content

Commit 98acdd7

Browse files
Do not match access keys on input elements that are not effectively enabled. (#13185)
1 parent bbe4ad8 commit 98acdd7

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/Avalonia.Base/Input/AccessKeyHandler.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ protected virtual void OnKeyDown(object? sender, KeyEventArgs e)
183183
var text = e.Key.ToString();
184184
var matches = _registered
185185
.Where(x => string.Equals(x.AccessKey, text, StringComparison.OrdinalIgnoreCase)
186-
&& x.Element.IsEffectivelyVisible)
186+
&& x.Element.IsEffectivelyVisible
187+
&& x.Element.IsEffectivelyEnabled)
187188
.Select(x => x.Element);
188189

189190
// If the menu is open, only match controls in the menu's visual tree.

tests/Avalonia.Base.UnitTests/Input/AccessKeyHandlerTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,30 @@ public void Should_Raise_AccessKeyPressed_For_Registered_Access_Key()
165165
Assert.Equal(1, raised);
166166
}
167167

168+
[Fact]
169+
public void Should_Not_Raise_AccessKeyPressed_For_Registered_Access_Key_When_Not_Effectively_Enabled()
170+
{
171+
var button = new Button();
172+
var root = new TestRoot(button) { IsEnabled = false };
173+
var target = new AccessKeyHandler();
174+
var raised = 0;
175+
176+
target.SetOwner(root);
177+
target.Register('A', button);
178+
button.AddHandler(AccessKeyHandler.AccessKeyPressedEvent, (s, e) => ++raised);
179+
180+
KeyDown(root, Key.LeftAlt);
181+
Assert.Equal(0, raised);
182+
183+
KeyDown(root, Key.A, KeyModifiers.Alt);
184+
Assert.Equal(0, raised);
185+
186+
KeyUp(root, Key.A, KeyModifiers.Alt);
187+
KeyUp(root, Key.LeftAlt);
188+
189+
Assert.Equal(0, raised);
190+
}
191+
168192
[Fact]
169193
public void Should_Open_MainMenu_On_Alt_KeyUp()
170194
{

0 commit comments

Comments
 (0)