From 70207cd374836ca62567f9ce3f46fcfda5c5e24b Mon Sep 17 00:00:00 2001 From: Babib3l Date: Wed, 1 Apr 2026 15:14:28 +0200 Subject: [PATCH] Fix macOS Caps Lock capture in Avalonia keyboard driver --- src/Ryujinx/Input/AvaloniaKeyboardDriver.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs index 58cd35ff2..215729bab 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs @@ -1,5 +1,6 @@ using Avalonia.Controls; using Avalonia.Input; +using Avalonia.Interactivity; using Ryujinx.Ava.Common.Locale; using Ryujinx.Common.Logging; using Ryujinx.Input; @@ -48,8 +49,11 @@ namespace Ryujinx.Ava.Input _pressedKeyQueueLock = new(); _defaultMode = defaultMode; - _control.KeyDown += OnKeyPress; - _control.KeyUp += OnKeyRelease; + // Use routed handlers so keys consumed earlier in the Avalonia pipeline + // can still be observed by the input driver. This is needed for keys like + // Caps Lock on macOS, which may not reach the plain CLR event path. + _control.AddHandler(InputElement.KeyDownEvent, OnKeyPress, RoutingStrategies.Tunnel, true); + _control.AddHandler(InputElement.KeyUpEvent, OnKeyRelease, RoutingStrategies.Tunnel, true); _control.TextInput += Control_TextInput; } @@ -91,8 +95,8 @@ namespace Ryujinx.Ava.Input { if (disposing) { - _control.KeyDown -= OnKeyPress; - _control.KeyUp -= OnKeyRelease; + _control.RemoveHandler(InputElement.KeyDownEvent, OnKeyPress); + _control.RemoveHandler(InputElement.KeyUpEvent, OnKeyRelease); _control.TextInput -= Control_TextInput; } }