From 697f925991adf40a3b9e045d37c162bea1c0f8cf Mon Sep 17 00:00:00 2001 From: litwak913 Date: Wed, 17 Jun 2026 12:17:04 +0800 Subject: [PATCH] fix: wlroots win32 vk code --- .../Interop/Framework/Instance/MaaController.cs | 2 +- .../MaaController/MaaWlRootsController.cs | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs b/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs index e128ac7..8fb6b0b 100644 --- a/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs +++ b/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs @@ -113,7 +113,7 @@ public static partial class MaaController public static partial MaaControllerHandle MaaPlayCoverControllerCreate(string address, string uuid); [LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)] - public static partial MaaControllerHandle MaaWlRootsControllerCreate(string wlr_socket_path); + public static partial MaaControllerHandle MaaWlRootsControllerCreate(string wlr_socket_path, [MarshalAs(UnmanagedType.I1)] bool use_win32_vk_code); /// /// Create a virtual gamepad controller for Windows. diff --git a/src/MaaFramework.Binding.Native/MaaController/MaaWlRootsController.cs b/src/MaaFramework.Binding.Native/MaaController/MaaWlRootsController.cs index 881234b..7b11fc5 100644 --- a/src/MaaFramework.Binding.Native/MaaController/MaaWlRootsController.cs +++ b/src/MaaFramework.Binding.Native/MaaController/MaaWlRootsController.cs @@ -12,18 +12,23 @@ public class MaaWlRootsController : MaaController { #pragma warning disable IDE0032 // 使用自动属性 private readonly string _debugWlrSocketPath; + private readonly bool _debugUseWin32VkCode; #pragma warning restore IDE0032 // 使用自动属性 [ExcludeFromCodeCoverage(Justification = "Debugger display.")] [DebuggerBrowsable(DebuggerBrowsableState.Never)] private string DebuggerDisplay => IsInvalid ? $"Invalid {GetType().Name}" - : $"{GetType().Name} {{ WlrSocketPath = {_debugWlrSocketPath} }}"; + : $"{GetType().Name} {{ WlrSocketPath = {_debugWlrSocketPath}, UseWin32VkCode = {_debugUseWin32VkCode} }}"; /// /// Creates a instance. /// /// The wayland socket path (e.g., "/run/user/1000/wayland-0"). + /// If true, key codes passed to click_key / key_down / key_up are + /// interpreted as Win32 Virtual-Key codes (VK_*) and translated to Linux evdev codes + /// internally. If false, key codes are passed through as raw evdev codes. + /// /// Executes if ; otherwise, not link. /// Checks LinkStart().Wait() status if ; otherwise, not check. /// @@ -32,15 +37,16 @@ public class MaaWlRootsController : MaaController /// /// /// - public MaaWlRootsController(string wlrSocketPath, LinkOption link = LinkOption.Start, CheckStatusOption check = CheckStatusOption.ThrowIfNotSucceeded) + public MaaWlRootsController(string wlrSocketPath, bool useWin32VkCode = false, LinkOption link = LinkOption.Start, CheckStatusOption check = CheckStatusOption.ThrowIfNotSucceeded) { ArgumentException.ThrowIfNullOrEmpty(wlrSocketPath); - var handle = MaaWlRootsControllerCreate(wlrSocketPath); + var handle = MaaWlRootsControllerCreate(wlrSocketPath, useWin32VkCode); _ = MaaControllerAddSink(handle, MaaEventCallback, (nint)MaaHandleType.Controller); SetHandle(handle, needReleased: true); _debugWlrSocketPath = wlrSocketPath; + _debugUseWin32VkCode = useWin32VkCode; if (link == LinkOption.Start) LinkStartOnConstructed(check, wlrSocketPath);