Skip to content

Commit

Permalink
fix(win/input): use active keyboard layout for non-normalized key eve…
Browse files Browse the repository at this point in the history
  • Loading branch information
cgutman authored and qiin2333 committed Dec 31, 2024
1 parent 97d0f61 commit fb28578
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/platform/windows/input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -618,12 +618,16 @@ namespace platf {
auto &ki = i.ki;

// If the client did not normalize this VK code to a US English layout, we can't accurately convert it to a scancode.
bool send_scancode = !(flags & SS_KBE_FLAG_NON_NORMALIZED) || config::input.always_send_scancodes;

if (send_scancode) {
// If we're set to always send scancodes, we will use the current keyboard layout to convert to a scancode. This will
// assume the client and host have the same keyboard layout, but it's probably better than always using US English.
if (!(flags & SS_KBE_FLAG_NON_NORMALIZED)) {
// Mask off the extended key byte
ki.wScan = VK_TO_SCANCODE_MAP[modcode & 0xFF];
}
else if (config::input.always_send_scancodes && modcode != VK_LWIN && modcode != VK_RWIN && modcode != VK_PAUSE) {
// For some reason, MapVirtualKey(VK_LWIN, MAPVK_VK_TO_VSC) doesn't seem to work :/
ki.wScan = MapVirtualKey(modcode, MAPVK_VK_TO_VSC);
}

// If we can map this to a scancode, send it as a scancode for maximum game compatibility.
if (ki.wScan) {
Expand Down

0 comments on commit fb28578

Please sign in to comment.