diff --git a/Kernel/Devices/HID/KeyboardDevice.h b/Kernel/Devices/HID/KeyboardDevice.h index 74197eaf20..2a7fff18c7 100644 --- a/Kernel/Devices/HID/KeyboardDevice.h +++ b/Kernel/Devices/HID/KeyboardDevice.h @@ -61,7 +61,8 @@ 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 }; + bool m_left_shift_pressed { false }; + bool m_right_shift_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 19db54ddc6..e81ea7fa0c 100644 --- a/Kernel/Devices/HID/PS2KeyboardDevice.cpp +++ b/Kernel/Devices/HID/PS2KeyboardDevice.cpp @@ -53,13 +53,12 @@ void PS2KeyboardDevice::irq_handle_byte_read(u8 byte) update_modifier(Mod_Super, pressed); break; case 0x2a: + m_left_shift_pressed = pressed; + update_modifier(Mod_Shift, m_left_shift_pressed || m_right_shift_pressed); + break; case 0x36: - 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); + m_right_shift_pressed = pressed; + update_modifier(Mod_Shift, m_left_shift_pressed || m_right_shift_pressed); break; } switch (ch) {