diff --git a/Kernel/Devices/HID/KeyboardDevice.h b/Kernel/Devices/HID/KeyboardDevice.h index 96cbf0310d..9d1b9f689d 100644 --- a/Kernel/Devices/HID/KeyboardDevice.h +++ b/Kernel/Devices/HID/KeyboardDevice.h @@ -56,6 +56,7 @@ protected: bool m_caps_lock_on { false }; bool m_num_lock_on { false }; bool m_has_e0_prefix { false }; + bool m_both_shift_keys_pressed { false }; void key_state_changed(u8 raw, bool pressed); }; diff --git a/Kernel/Devices/HID/PS2KeyboardDevice.cpp b/Kernel/Devices/HID/PS2KeyboardDevice.cpp index 9dfe2a772d..8ff6d5b3b0 100644 --- a/Kernel/Devices/HID/PS2KeyboardDevice.cpp +++ b/Kernel/Devices/HID/PS2KeyboardDevice.cpp @@ -54,7 +54,12 @@ void PS2KeyboardDevice::irq_handle_byte_read(u8 byte) break; case 0x2a: case 0x36: - update_modifier(Mod_Shift, pressed); + if (m_both_shift_keys_pressed) + m_both_shift_keys_pressed = false; + else if ((m_modifiers & Mod_Shift) != 0 && pressed) + m_both_shift_keys_pressed = true; + else + update_modifier(Mod_Shift, pressed); break; } switch (ch) {