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 { |