Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(531)

Unified Diff: ui/events/event.cc

Issue 1284433002: Revise ui::DomKey to unify character and non-character codes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: IsDead Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/event.h ('k') | ui/events/keycodes/dom/dom_key.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/event.cc
diff --git a/ui/events/event.cc b/ui/events/event.cc
index 8b5b47da5be1afd54e806928bff62c371624bcb8..383e3736c38c42bdcff6b8159ad1576170982421 100644
--- a/ui/events/event.cc
+++ b/ui/events/event.cc
@@ -673,9 +673,7 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event)
key_code_(KeyboardCodeFromNative(native_event)),
code_(CodeFromNative(native_event)),
is_char_(IsCharFromNative(native_event)),
- platform_keycode_(PlatformKeycodeFromNative(native_event)),
- key_(DomKey::NONE),
- character_(0) {
+ platform_keycode_(PlatformKeycodeFromNative(native_event)) {
if (IsRepeated(*this))
set_flags(flags() | ui::EF_IS_REPEAT);
@@ -685,7 +683,7 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event)
#if defined(OS_WIN)
// Only Windows has native character events.
if (is_char_)
- character_ = native_event.wParam;
+ key_ = DomKey::FromCharacter(native_event.wParam);
#endif
}
@@ -694,11 +692,7 @@ KeyEvent::KeyEvent(EventType type,
int flags)
: Event(type, EventTimeForNow(), flags),
key_code_(key_code),
- code_(UsLayoutKeyboardCodeToDomCode(key_code)),
- is_char_(false),
- platform_keycode_(0),
- key_(DomKey::NONE),
- character_() {
+ code_(UsLayoutKeyboardCodeToDomCode(key_code)) {
}
KeyEvent::KeyEvent(EventType type,
@@ -707,11 +701,7 @@ KeyEvent::KeyEvent(EventType type,
int flags)
: Event(type, EventTimeForNow(), flags),
key_code_(key_code),
- code_(code),
- is_char_(false),
- platform_keycode_(0),
- key_(DomKey::NONE),
- character_(0) {
+ code_(code) {
}
KeyEvent::KeyEvent(EventType type,
@@ -719,15 +709,11 @@ KeyEvent::KeyEvent(EventType type,
DomCode code,
int flags,
DomKey key,
- base::char16 character,
base::TimeDelta time_stamp)
: Event(type, time_stamp, flags),
key_code_(key_code),
code_(code),
- is_char_(false),
- platform_keycode_(0),
- key_(key),
- character_(character) {
+ key_(key) {
}
KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags)
@@ -735,9 +721,7 @@ KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags)
key_code_(key_code),
code_(DomCode::NONE),
is_char_(true),
- platform_keycode_(0),
- key_(DomKey::CHARACTER),
- character_(character) {
+ key_(DomKey::FromCharacter(character)) {
}
KeyEvent::KeyEvent(const KeyEvent& rhs)
@@ -746,8 +730,7 @@ KeyEvent::KeyEvent(const KeyEvent& rhs)
code_(rhs.code_),
is_char_(rhs.is_char_),
platform_keycode_(rhs.platform_keycode_),
- key_(rhs.key_),
- character_(rhs.character_) {
+ key_(rhs.key_) {
if (rhs.extended_key_event_data_)
extended_key_event_data_.reset(rhs.extended_key_event_data_->Clone());
}
@@ -760,7 +743,6 @@ KeyEvent& KeyEvent::operator=(const KeyEvent& rhs) {
key_ = rhs.key_;
is_char_ = rhs.is_char_;
platform_keycode_ = rhs.platform_keycode_;
- character_ = rhs.character_;
if (rhs.extended_key_event_data_)
extended_key_event_data_.reset(rhs.extended_key_event_data_->Clone());
@@ -775,14 +757,6 @@ void KeyEvent::SetExtendedKeyEventData(scoped_ptr<ExtendedKeyEventData> data) {
}
void KeyEvent::ApplyLayout() const {
- // If the client has set the character (e.g. faked key events from virtual
- // keyboard), it's client's responsibility to set the dom key correctly.
- // Otherwise, set the dom key as unidentified.
- // Please refer to crbug.com/443889.
- if (character_ != 0) {
- key_ = DomKey::UNIDENTIFIED;
- return;
- }
ui::DomCode code = code_;
if (code == DomCode::NONE) {
// Catch old code that tries to do layout without a physical key, and try
@@ -806,13 +780,12 @@ void KeyEvent::ApplyLayout() const {
// returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11.
// GetCharacterFromXEvent returns 'à' in that case.
if (!IsControlDown() && native_event()) {
- GetMeaningFromXEvent(native_event(), &key_, &character_);
+ key_ = GetDomKeyFromXEvent(native_event());
return;
}
#elif defined(USE_OZONE)
if (KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup(
- code, flags(), &key_, &character_, &dummy_key_code,
- &platform_keycode_)) {
+ code, flags(), &key_, &dummy_key_code, &platform_keycode_)) {
return;
}
#else
@@ -821,33 +794,38 @@ void KeyEvent::ApplyLayout() const {
EventTypeFromNative(native_event()) == ET_KEY_RELEASED);
}
#endif
- if (!DomCodeToUsLayoutMeaning(code, flags(), &key_, &character_,
- &dummy_key_code)) {
+ if (!DomCodeToUsLayoutDomKey(code, flags(), &key_, &dummy_key_code))
key_ = DomKey::UNIDENTIFIED;
- }
}
DomKey KeyEvent::GetDomKey() const {
- // Determination of character_ and key_ may be done lazily.
+ // Determination of key_ may be done lazily.
if (key_ == DomKey::NONE)
ApplyLayout();
return key_;
}
base::char16 KeyEvent::GetCharacter() const {
- // Determination of character_ and key_ may be done lazily.
+ // Determination of key_ may be done lazily.
if (key_ == DomKey::NONE)
ApplyLayout();
- return character_;
+ if (key_.IsCharacter()) {
+ // Historically ui::KeyEvent has held only BMP characters.
+ // Until this explicitly changes, require |key_| to hold a BMP character.
+ DomKey::Base utf32_character = key_.ToCharacter();
+ base::char16 ucs2_character = static_cast<base::char16>(utf32_character);
+ DCHECK(static_cast<DomKey::Base>(ucs2_character) == utf32_character);
+ return ucs2_character;
+ }
+ return 0;
}
base::char16 KeyEvent::GetText() const {
if ((flags() & EF_CONTROL_DOWN) != 0) {
- base::char16 character;
ui::DomKey key;
ui::KeyboardCode key_code;
- if (DomCodeToControlCharacter(code_, flags(), &key, &character, &key_code))
- return character;
+ if (DomCodeToControlCharacter(code_, flags(), &key, &key_code))
+ return key.ToCharacter();
}
return GetUnmodifiedText();
}
@@ -908,7 +886,7 @@ KeyboardCode KeyEvent::GetLocatedWindowsKeyboardCode() const {
uint16 KeyEvent::GetConflatedWindowsKeyCode() const {
if (is_char_)
- return character_;
+ return key_.ToCharacter();
return key_code_;
}
« no previous file with comments | « ui/events/event.h ('k') | ui/events/keycodes/dom/dom_key.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698