feat: add keyboard layout support

This commit is contained in:
2026-08-13 17:57:44 +02:00
parent 86e3ebfe33
commit 821543238d
36 changed files with 1132 additions and 125 deletions
+21 -4
View File
@@ -179,7 +179,9 @@ namespace Drivers::PS2::Keyboard {
.Shift = g_Modifiers.LeftShift || g_Modifiers.RightShift,
.Ctrl = g_Modifiers.LeftCtrl || g_Modifiers.RightCtrl,
.Alt = g_Modifiers.LeftAlt || g_Modifiers.RightAlt,
.CapsLock = g_Modifiers.CapsLock
.CapsLock = g_Modifiers.CapsLock,
.AltGr = g_Modifiers.RightAlt,
.Extended = true
};
PushAndNotify(event);
@@ -237,7 +239,9 @@ namespace Drivers::PS2::Keyboard {
.Shift = g_Modifiers.LeftShift || g_Modifiers.RightShift,
.Ctrl = g_Modifiers.LeftCtrl || g_Modifiers.RightCtrl,
.Alt = g_Modifiers.LeftAlt || g_Modifiers.RightAlt,
.CapsLock = g_Modifiers.CapsLock
.CapsLock = g_Modifiers.CapsLock,
.AltGr = g_Modifiers.RightAlt,
.Extended = false
};
PushAndNotify(event);
return;
@@ -261,7 +265,9 @@ namespace Drivers::PS2::Keyboard {
.Shift = g_Modifiers.LeftShift || g_Modifiers.RightShift,
.Ctrl = g_Modifiers.LeftCtrl || g_Modifiers.RightCtrl,
.Alt = g_Modifiers.LeftAlt || g_Modifiers.RightAlt,
.CapsLock = g_Modifiers.CapsLock
.CapsLock = g_Modifiers.CapsLock,
.AltGr = g_Modifiers.RightAlt,
.Extended = false
};
PushAndNotify(event);
@@ -298,7 +304,18 @@ namespace Drivers::PS2::Keyboard {
}
void InjectKeyEvent(const KeyEvent& event) {
PushAndNotify(event);
// Caps Lock is owned here rather than by each injecting driver: USB HID
// reports the key as an ordinary usage and carries no lock state, so
// without this the lock would never toggle on a USB keyboard.
KeyEvent stamped = event;
if (stamped.Scancode == ScCapsLock && stamped.Pressed)
g_Modifiers.CapsLock = !g_Modifiers.CapsLock;
stamped.CapsLock = g_Modifiers.CapsLock;
PushAndNotify(stamped);
}
bool GetCapsLock() {
return g_Modifiers.CapsLock;
}
};