Index: ui/events/keycodes/keyboard_code_conversion.cc |
diff --git a/ui/events/keycodes/keyboard_code_conversion.cc b/ui/events/keycodes/keyboard_code_conversion.cc |
index 2d7e2a5a4f03ab2d9ad746835a448fb57c6ab581..0f85c3ecfeaf56b42dafab1703e83cc06ac4004f 100644 |
--- a/ui/events/keycodes/keyboard_code_conversion.cc |
+++ b/ui/events/keycodes/keyboard_code_conversion.cc |
@@ -5,6 +5,7 @@ |
#include "ui/events/keycodes/keyboard_code_conversion.h" |
#include "ui/events/event_constants.h" |
+#include "ui/events/keycodes/dom3/dom_code.h" |
#include "ui/events/keycodes/dom3/dom_key.h" |
namespace ui { |
@@ -124,6 +125,11 @@ const struct KeyboardCodeToMeaning { |
#endif |
}; |
+bool IsRightSideDomCode(DomCode code) { |
+ return (code == DomCode::SHIFT_RIGHT) || (code == DomCode::CONTROL_RIGHT) || |
+ (code == DomCode::ALT_RIGHT) || (code == DomCode::OS_RIGHT); |
+} |
+ |
} // anonymous namespace |
base::char16 GetCharacterFromKeyCode(KeyboardCode key_code, int flags) { |
@@ -261,4 +267,60 @@ bool GetMeaningFromKeyCode(KeyboardCode key_code, |
return false; |
} |
+// Determine the non-located VKEY corresponding to a located VKEY. |
+KeyboardCode LocatedToNonLocatedKeyboardCode(KeyboardCode key_code) { |
+ switch (key_code) { |
+ case VKEY_RWIN: |
+ return VKEY_LWIN; |
+ case VKEY_LSHIFT: |
+ case VKEY_RSHIFT: |
+ return VKEY_SHIFT; |
+ case VKEY_LCONTROL: |
+ case VKEY_RCONTROL: |
+ return VKEY_CONTROL; |
+ case VKEY_LMENU: |
+ case VKEY_RMENU: |
+ return VKEY_MENU; |
+ default: |
+ return key_code; |
+ } |
+} |
+ |
+// Determine the located VKEY corresponding to a non-located VKEY. |
+KeyboardCode NonLocatedToLocatedKeyboardCode(KeyboardCode key_code, |
+ DomCode dom_code) { |
+ switch (key_code) { |
+ case VKEY_SHIFT: |
+ return IsRightSideDomCode(dom_code) ? VKEY_RSHIFT : VKEY_LSHIFT; |
+ case VKEY_CONTROL: |
+ return IsRightSideDomCode(dom_code) ? VKEY_RCONTROL : VKEY_LCONTROL; |
+ case VKEY_MENU: |
+ return IsRightSideDomCode(dom_code) ? VKEY_RMENU : VKEY_LMENU; |
+ case VKEY_LWIN: |
+ return IsRightSideDomCode(dom_code) ? VKEY_RWIN : VKEY_LWIN; |
+ case VKEY_0: |
+ return (dom_code == DomCode::NUMPAD0) ? VKEY_NUMPAD0 : VKEY_0; |
+ case VKEY_1: |
+ return (dom_code == DomCode::NUMPAD1) ? VKEY_NUMPAD1 : VKEY_1; |
+ case VKEY_2: |
+ return (dom_code == DomCode::NUMPAD2) ? VKEY_NUMPAD2 : VKEY_2; |
+ case VKEY_3: |
+ return (dom_code == DomCode::NUMPAD3) ? VKEY_NUMPAD3 : VKEY_3; |
+ case VKEY_4: |
+ return (dom_code == DomCode::NUMPAD4) ? VKEY_NUMPAD4 : VKEY_4; |
+ case VKEY_5: |
+ return (dom_code == DomCode::NUMPAD5) ? VKEY_NUMPAD5 : VKEY_5; |
+ case VKEY_6: |
+ return (dom_code == DomCode::NUMPAD6) ? VKEY_NUMPAD6 : VKEY_6; |
+ case VKEY_7: |
+ return (dom_code == DomCode::NUMPAD7) ? VKEY_NUMPAD7 : VKEY_7; |
+ case VKEY_8: |
+ return (dom_code == DomCode::NUMPAD8) ? VKEY_NUMPAD8 : VKEY_8; |
+ case VKEY_9: |
+ return (dom_code == DomCode::NUMPAD9) ? VKEY_NUMPAD9 : VKEY_9; |
+ default: |
+ return key_code; |
+ } |
+} |
+ |
} // namespace ui |