Compare commits
4 commits
a7c19f3a60
...
7e8c4b9bc7
| Author | SHA1 | Date | |
|---|---|---|---|
| 7e8c4b9bc7 | |||
| 096c13db05 | |||
| 58bc803930 | |||
| f01b645e41 |
2 changed files with 51 additions and 11 deletions
|
|
@ -30,8 +30,8 @@
|
|||
.hash = "fuzzig-0.1.1-Ji0xivxIAQBD0g8O_NV_0foqoPf3elsg9Sc3pNfdVH4D",
|
||||
},
|
||||
.vaxis = .{
|
||||
.url = "git+https://github.com/neurocyte/libvaxis?ref=main#4c4b9a78693767b945016a2dd28d86cf2a8eb8c4",
|
||||
.hash = "vaxis-0.5.1-BWNV_I9KCQDMo0g6nTnS_TS8OJEpdbBfXTXESSVjCMcT",
|
||||
.url = "git+https://github.com/neurocyte/libvaxis?ref=main#1f6c7222f59607bff0ee8d7c6a0637a05bceffcd",
|
||||
.hash = "vaxis-0.5.1-BWNV_CNLCQDmr-D_UzqGRAngktQt7hiGTRf1gyozwxcG",
|
||||
},
|
||||
.zeit = .{
|
||||
.url = "git+https://github.com/rockorager/zeit?ref=zig-0.15#ed2ca60db118414bda2b12df2039e33bad3b0b88",
|
||||
|
|
|
|||
|
|
@ -748,7 +748,54 @@ fn sendKey(
|
|||
win32.GetLastError(),
|
||||
);
|
||||
|
||||
const mods: vaxis.Key.Modifiers = .{
|
||||
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 .{
|
||||
.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)),
|
||||
|
|
@ -769,11 +816,6 @@ 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",
|
||||
|
|
@ -790,8 +832,6 @@ 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,
|
||||
|
|
@ -814,7 +854,7 @@ fn sendKey(
|
|||
}
|
||||
|
||||
if (unicode_result == 0) {
|
||||
std.log.warn("unknown virtual key {f} (0x{x})", .{ winkey, winkey.vk });
|
||||
std.log.debug("unknown virtual key {f} (0x{x})", .{ winkey, winkey.vk });
|
||||
return;
|
||||
}
|
||||
for (char_buf[0..@intCast(unicode_result)]) |codepoint| {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue