diff --git a/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h b/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h index c6cf17710b..5682b328ca 100644 --- a/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h +++ b/src/add-ons/input_server/devices/keyboard/KeyboardInputDevice.h @@ -58,6 +58,8 @@ private: bool fIsAT; volatile bool fInputMethodStarted; uint32 fModifiers; + uint32 fCommandKey; + uint32 fControlKey; volatile bool fUpdateSettings; volatile uint32 fSettingsCommand; diff --git a/src/add-ons/input_server/devices/keyboard/Keymap.cpp b/src/add-ons/input_server/devices/keyboard/Keymap.cpp index effc293612..0c0b765c68 100644 --- a/src/add-ons/input_server/devices/keyboard/Keymap.cpp +++ b/src/add-ons/input_server/devices/keyboard/Keymap.cpp @@ -155,6 +155,20 @@ Keymap::Modifier(uint32 keyCode) return 0; } +uint32 +Keymap::KeyForModifier(uint32 modifier) +{ + if (modifier == B_LEFT_COMMAND_KEY) + return fKeys.left_command_key; + if (modifier == B_RIGHT_COMMAND_KEY) + return fKeys.right_command_key; + if (modifier == B_LEFT_CONTROL_KEY) + return fKeys.left_control_key; + if (modifier == B_RIGHT_CONTROL_KEY) + return fKeys.right_control_key; + + return 0; +} //! Tell if a key is a dead key, needed for draw a dead key uint8 diff --git a/src/add-ons/input_server/devices/keyboard/Keymap.h b/src/add-ons/input_server/devices/keyboard/Keymap.h index 6fcf7e7c04..ce981be314 100644 --- a/src/add-ons/input_server/devices/keyboard/Keymap.h +++ b/src/add-ons/input_server/devices/keyboard/Keymap.h @@ -27,6 +27,7 @@ public: void DumpKeymap(); bool IsModifierKey(uint32 keyCode); uint32 Modifier(uint32 keyCode); + uint32 KeyForModifier(uint32 modifier); uint8 IsDeadKey(uint32 keyCode, uint32 modifiers); bool IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey); void GetChars(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** chars, int32* numBytes);