Index: ui/events/keycodes/keyboard_code_conversion_mac.mm |
diff --git a/ui/events/keycodes/keyboard_code_conversion_mac.mm b/ui/events/keycodes/keyboard_code_conversion_mac.mm |
index 8b9ce812c17328488c54ef0559473501058030b0..f3b02d5daec473dc705faae64ac292445457231f 100644 |
--- a/ui/events/keycodes/keyboard_code_conversion_mac.mm |
+++ b/ui/events/keycodes/keyboard_code_conversion_mac.mm |
@@ -200,6 +200,42 @@ const KeyCodeMap kKeyCodesMap[] = { |
{ VKEY_OEM_CLEAR /* 0xFE */, kVK_ANSI_KeypadClear, kClearCharCode } |
}; |
+bool IsKeypadEvent(NSEvent* event) { |
+ // Check that this is the type of event that has a keyCode. |
+ switch ([event type]) { |
+ case NSKeyDown: |
+ case NSKeyUp: |
+ case NSFlagsChanged: |
+ break; |
+ default: |
+ return false; |
+ } |
+ |
+ switch ([event keyCode]) { |
+ case kVK_ANSI_KeypadClear: |
+ case kVK_ANSI_KeypadEquals: |
+ case kVK_ANSI_KeypadMultiply: |
+ case kVK_ANSI_KeypadDivide: |
+ case kVK_ANSI_KeypadMinus: |
+ case kVK_ANSI_KeypadPlus: |
+ case kVK_ANSI_KeypadEnter: |
+ case kVK_ANSI_KeypadDecimal: |
+ case kVK_ANSI_Keypad0: |
+ case kVK_ANSI_Keypad1: |
+ case kVK_ANSI_Keypad2: |
+ case kVK_ANSI_Keypad3: |
+ case kVK_ANSI_Keypad4: |
+ case kVK_ANSI_Keypad5: |
+ case kVK_ANSI_Keypad6: |
+ case kVK_ANSI_Keypad7: |
+ case kVK_ANSI_Keypad8: |
+ case kVK_ANSI_Keypad9: |
+ return true; |
+ } |
+ |
+ return false; |
+} |
+ |
// A convenient array for getting symbol characters on the number keys. |
const char kShiftCharsForNumberKeys[] = ")!@#$%^&*("; |
@@ -533,7 +569,8 @@ int MacKeyCodeForWindowsKeyCode(KeyboardCode keycode, |
KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event) { |
KeyboardCode code = VKEY_UNKNOWN; |
- if ([event type] == NSKeyDown || [event type] == NSKeyUp) { |
+ if (!IsKeypadEvent(event) && |
+ ([event type] == NSKeyDown || [event type] == NSKeyUp)) { |
NSString* characters = [event characters]; |
if ([characters length] > 0) |
code = KeyboardCodeFromCharCode([characters characterAtIndex:0]); |