diff --git a/Kernel/Devices/HID/KeyboardDevice.h b/Kernel/Devices/HID/KeyboardDevice.h index b96343535e..238a60894b 100644 --- a/Kernel/Devices/HID/KeyboardDevice.h +++ b/Kernel/Devices/HID/KeyboardDevice.h @@ -58,6 +58,8 @@ protected: bool m_has_e0_prefix { false }; bool m_left_shift_pressed { false }; bool m_right_shift_pressed { false }; + bool m_left_super_pressed { false }; + bool m_right_super_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 47d907198d..30785501d7 100644 --- a/Kernel/Devices/HID/PS2KeyboardDevice.cpp +++ b/Kernel/Devices/HID/PS2KeyboardDevice.cpp @@ -51,7 +51,12 @@ void PS2KeyboardDevice::irq_handle_byte_read(u8 byte) update_modifier(Mod_Ctrl, pressed); break; case 0x5b: - update_modifier(Mod_Super, pressed); + m_left_super_pressed = pressed; + update_modifier(Mod_Super, m_left_super_pressed || m_right_super_pressed); + break; + case 0x5c: + m_right_super_pressed = pressed; + update_modifier(Mod_Super, m_left_super_pressed || m_right_super_pressed); break; case 0x2a: m_left_shift_pressed = pressed;