diff --git a/build.zig.zon b/build.zig.zon index e4ed7e5e..6f22225f 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -30,8 +30,8 @@ .hash = "fuzzig-0.1.1-Ji0xivxIAQBD0g8O_NV_0foqoPf3elsg9Sc3pNfdVH4D", }, .vaxis = .{ - .url = "git+https://github.com/neurocyte/libvaxis?ref=main#1f6c7222f59607bff0ee8d7c6a0637a05bceffcd", - .hash = "vaxis-0.5.1-BWNV_CNLCQDmr-D_UzqGRAngktQt7hiGTRf1gyozwxcG", + .url = "git+https://github.com/neurocyte/libvaxis?ref=main#4c4b9a78693767b945016a2dd28d86cf2a8eb8c4", + .hash = "vaxis-0.5.1-BWNV_I9KCQDMo0g6nTnS_TS8OJEpdbBfXTXESSVjCMcT", }, .zeit = .{ .url = "git+https://github.com/rockorager/zeit?ref=zig-0.15#ed2ca60db118414bda2b12df2039e33bad3b0b88", diff --git a/src/win32/gui.zig b/src/win32/gui.zig index e770d7f4..6e2f148a 100644 --- a/src/win32/gui.zig +++ b/src/win32/gui.zig @@ -748,54 +748,7 @@ fn sendKey( win32.GetLastError(), ); - const win_key_flags: WinKeyFlags = @bitCast(@as(u32, @intCast(0xffffffff & lparam))); - const winkey: WinKey = .{ - .vk = @intCast(0xffff & wparam), - .extended = win_key_flags.extended, - }; - - const is_altgr: bool = blk: { - if (winkey.vk == @intFromEnum(win32.VK_CONTROL)) { - var next: win32.MSG = undefined; - if (win32.PeekMessageW(&next, null, win32.WM_KEYFIRST, win32.WM_KEYLAST, win32.PM_NOREMOVE) != 0) { - const next_win_key_flags: WinKeyFlags = @bitCast(@as(u32, @intCast(0xffffffff & next.lParam))); - const next_winkey: WinKey = .{ - .vk = @intCast(0xffff & next.wParam), - .extended = next_win_key_flags.extended, - }; - if (next_winkey.vk == @intFromEnum(win32.VK_MENU) and next_win_key_flags.extended) { - _ = win32.PeekMessageW(&next, null, win32.WM_KEYFIRST, win32.WM_KEYLAST, win32.PM_REMOVE); - break :blk true; - } - } - } - const right_alt = keyboard_state[@intFromEnum(win32.VK_RMENU)] & 0x80 != 0; - const left_ctrl = keyboard_state[@intFromEnum(win32.VK_LCONTROL)] & 0x80 != 0; - const right_ctrl = keyboard_state[@intFromEnum(win32.VK_RCONTROL)] & 0x80 != 0; - break :blk right_alt and left_ctrl and !right_ctrl; - }; - - if (is_altgr) { - if (winkey.vk == @intFromEnum(win32.VK_CONTROL) or - winkey.vk == @intFromEnum(win32.VK_LCONTROL) or - winkey.vk == @intFromEnum(win32.VK_MENU) or - winkey.vk == @intFromEnum(win32.VK_RMENU)) - { - std.log.debug("dropped AltGr key event: {!t} {t}", .{ std.meta.intToEnum(win32.VIRTUAL_KEY, winkey.vk), kind }); - return; - } - } - - const mods: vaxis.Key.Modifiers = if (is_altgr) .{ - .shift = (0 != (keyboard_state[@intFromEnum(win32.VK_SHIFT)] & 0x80)), - .alt = (0 != (keyboard_state[@intFromEnum(win32.VK_LMENU)] & 0x80)), - .ctrl = (0 != (keyboard_state[@intFromEnum(win32.VK_RCONTROL)] & 0x80)), - .super = false, - .hyper = false, - .meta = false, - .caps_lock = (0 != (keyboard_state[@intFromEnum(win32.VK_CAPITAL)] & 1)), - .num_lock = false, - } else .{ + const mods: vaxis.Key.Modifiers = .{ .shift = (0 != (keyboard_state[@intFromEnum(win32.VK_SHIFT)] & 0x80)), .alt = (0 != (keyboard_state[@intFromEnum(win32.VK_MENU)] & 0x80)), .ctrl = (0 != (keyboard_state[@intFromEnum(win32.VK_CONTROL)] & 0x80)), @@ -816,6 +769,11 @@ fn sendKey( .release => input.event.release, }; + const win_key_flags: WinKeyFlags = @bitCast(@as(u32, @intCast(0xffffffff & lparam))); + const winkey: WinKey = .{ + .vk = @intCast(0xffff & wparam), + .extended = win_key_flags.extended, + }; if (winkey.skipToUnicode()) |codepoint| { state.pid.send(.{ "RDR", @@ -832,6 +790,8 @@ fn sendKey( const max_char_count = 20; var char_buf: [max_char_count + 1]u16 = undefined; + // release control key when getting the unicode character of this key + keyboard_state[@intFromEnum(win32.VK_CONTROL)] = 0; const unicode_result = win32.ToUnicode( winkey.vk, win_key_flags.scan_code, @@ -854,7 +814,7 @@ fn sendKey( } if (unicode_result == 0) { - std.log.debug("unknown virtual key {f} (0x{x})", .{ winkey, winkey.vk }); + std.log.warn("unknown virtual key {f} (0x{x})", .{ winkey, winkey.vk }); return; } for (char_buf[0..@intCast(unicode_result)]) |codepoint| {