Compare commits

..

No commits in common. "7e8c4b9bc71dad3281ae4a995d241c24350d98e5" and "a7c19f3a606d50615f09322f14c7673fafc74fff" have entirely different histories.

2 changed files with 11 additions and 51 deletions

View file

@ -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",

View file

@ -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| {