Chromium Code Reviews| Index: ui/events/event.cc |
| diff --git a/ui/events/event.cc b/ui/events/event.cc |
| index 4a8370bb16aebee181bd887a4fcf4664ccea18f9..1d3fb23bf09b9cc8328bcea603b54d63c606a9e5 100644 |
| --- a/ui/events/event.cc |
| +++ b/ui/events/event.cc |
| @@ -538,6 +538,16 @@ void TouchEvent::UpdateForRootTransform( |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| +// KeyEvent::ExtendedMojoData |
| + |
| +struct KeyEvent::ExtendedMojoData { |
| + int32_t windows_key_code; |
| + int32_t native_key_code; |
| + uint16_t text; |
| + uint16_t unmodified_text; |
| +}; |
| + |
| +//////////////////////////////////////////////////////////////////////////////// |
| // KeyEvent |
| // static |
| @@ -584,7 +594,8 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event) |
| code_(CodeFromNative(native_event)), |
| is_char_(IsCharFromNative(native_event)), |
| platform_keycode_(PlatformKeycodeFromNative(native_event)), |
| - character_(0) { |
| + character_(0), |
| + extended_mojo_data_() { |
|
sky
2014/08/21 15:44:42
nit: remove as not needed (from all of these).
|
| if (IsRepeated(*this)) |
| set_flags(flags() | ui::EF_IS_REPEAT); |
| @@ -600,7 +611,8 @@ KeyEvent::KeyEvent(EventType type, |
| key_code_(key_code), |
| is_char_(false), |
| platform_keycode_(0), |
| - character_(GetCharacterFromKeyCode(key_code, flags)) { |
| + character_(GetCharacterFromKeyCode(key_code, flags)), |
| + extended_mojo_data_() { |
| } |
| KeyEvent::KeyEvent(EventType type, |
| @@ -612,7 +624,8 @@ KeyEvent::KeyEvent(EventType type, |
| code_(code), |
| is_char_(false), |
| platform_keycode_(0), |
| - character_(GetCharacterFromKeyCode(key_code, flags)) { |
| + character_(GetCharacterFromKeyCode(key_code, flags)), |
| + extended_mojo_data_() { |
| } |
| KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags) |
| @@ -620,7 +633,88 @@ KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags) |
| key_code_(key_code), |
| code_(""), |
| is_char_(true), |
| - character_(character) { |
| + platform_keycode_(0), |
| + character_(character), |
| + extended_mojo_data_() { |
| +} |
| + |
| +KeyEvent::KeyEvent(const KeyEvent& rhs) |
| + : Event(rhs), |
| + key_code_(rhs.key_code_), |
| + code_(rhs.code_), |
| + is_char_(rhs.is_char_), |
| + platform_keycode_(rhs.platform_keycode_), |
| + character_(rhs.character_), |
| + extended_mojo_data_() { |
| + if (rhs.extended_mojo_data_) { |
|
sky
2014/08/21 15:44:42
Why the setter and not just copy rhs.extended_mojo
|
| + SetSelfContainedKeyEventData(rhs.extended_mojo_data_->windows_key_code, |
| + platform_keycode_, |
| + rhs.extended_mojo_data_->text, |
| + rhs.extended_mojo_data_->unmodified_text); |
| + } |
| +} |
| + |
| +KeyEvent& KeyEvent::operator=(const KeyEvent& rhs) { |
| + if (this != &rhs) { |
| + Event::operator=(rhs); |
| + key_code_ = rhs.key_code_; |
| + code_ = rhs.code_; |
| + is_char_ = rhs.is_char_; |
| + platform_keycode_ = rhs.platform_keycode_; |
| + character_ = rhs.character_; |
| + |
| + if (rhs.extended_mojo_data_) { |
| + SetSelfContainedKeyEventData(rhs.extended_mojo_data_->windows_key_code, |
| + platform_keycode_, |
| + rhs.extended_mojo_data_->text, |
| + rhs.extended_mojo_data_->unmodified_text); |
| + } |
| + } |
| + return *this; |
| +} |
| + |
| +KeyEvent::~KeyEvent() {} |
| + |
| +void KeyEvent::SetSelfContainedKeyEventData(int32_t windows_key_code, |
| + int32_t platform_key_code, |
| + base::char16 text, |
| + base::char16 unmodified_text) { |
| + extended_mojo_data_.reset(new ExtendedMojoData); |
| + extended_mojo_data_->windows_key_code = windows_key_code; |
| + extended_mojo_data_->text = text; |
| + extended_mojo_data_->unmodified_text = unmodified_text; |
| + |
|
sky
2014/08/21 15:44:42
You don't set native_key_code
|
| + platform_keycode_ = platform_key_code; |
| +} |
| + |
| +int32_t KeyEvent::GetWindowsKeyCode() const { |
| + if (HasNativeEvent()) |
| + return ui::WindowsKeycodeFromNative(native_event()); |
| + else if (extended_mojo_data_) |
|
sky
2014/08/21 15:44:42
nit: no else after a return (for all of these).
|
| + return extended_mojo_data_->windows_key_code; |
| + |
| + NOTREACHED(); |
| + return 0; |
| +} |
| + |
| +base::char16 KeyEvent::GetKeyText() const { |
| + if (HasNativeEvent()) |
| + return ui::TextFromNative(native_event()); |
| + else if (extended_mojo_data_) |
| + return extended_mojo_data_->text; |
| + |
| + NOTREACHED(); |
| + return 0; |
| +} |
| + |
| +base::char16 KeyEvent::GetKeyUnmodifiedText() const { |
| + if (HasNativeEvent()) |
| + return ui::UnmodifiedTextFromNative(native_event()); |
| + else if (extended_mojo_data_) |
| + return extended_mojo_data_->unmodified_text; |
| + |
| + NOTREACHED(); |
| + return 0; |
| } |
| base::char16 KeyEvent::GetCharacter() const { |