Index: ui/events/event.h |
diff --git a/ui/events/event.h b/ui/events/event.h |
index 0667824d34bf3b97c01aa6e0d50f3d9ef01006b6..d06a181ab72cfbff954be92f9a003a39c14cdc85 100644 |
--- a/ui/events/event.h |
+++ b/ui/events/event.h |
@@ -15,6 +15,7 @@ |
#include "ui/events/event_constants.h" |
#include "ui/events/gesture_event_details.h" |
#include "ui/events/gestures/gesture_types.h" |
+#include "ui/events/keycodes/dom/dom_key.h" |
#include "ui/events/keycodes/keyboard_codes.h" |
#include "ui/events/latency_info.h" |
#include "ui/gfx/geometry/point.h" |
@@ -27,7 +28,6 @@ class Transform; |
namespace ui { |
class EventTarget; |
enum class DomCode; |
-enum class DomKey; |
class EVENTS_EXPORT Event { |
public: |
@@ -659,40 +659,38 @@ class EVENTS_EXPORT ExtendedKeyEventData { |
// or a character event (is_char_ == true). |
// |
// For a keystroke event, |
-// -- is_char_ is false. |
-// -- Event::type() can be any one of ET_KEY_PRESSED, ET_KEY_RELEASED. |
-// -- code_ and Event::flags() represent the physical key event. |
+// -- |bool is_char_| is false. |
+// -- |EventType Event::type()| can be ET_KEY_PRESSED or ET_KEY_RELEASED. |
+// -- |DomCode code_| and |int Event::flags()| represent the physical key event. |
// - code_ is a platform-independent representation of the physical key, |
-// based on DOM KeyboardEvent |code| values. It does not vary depending |
-// on key layout. |
+// based on DOM UI Events KeyboardEvent |code| values. It does not |
+// vary depending on key layout. |
+// http://www.w3.org/TR/DOM-Level-3-Events-code/ |
// - Event::flags() provides the active modifiers for the physical key |
// press. Its value reflects the state after the event; that is, for |
// a modifier key, a press includes the corresponding flag and a release |
// does not. |
-// -- key_ and character_ provide the meaning of the key event, in the context |
-// of the active layout and modifiers. Together they correspond to DOM |
-// KeyboardEvent |key| values. |
-// - key_ is an enumeration of non-Unicode meanings, plus sentinels |
-// (specifically DomKey::CHARACTER for Unicode meanings). |
-// - character_ is the code point for Unicode meanings. |
-// -- key_code_ is a KeyboardCode value associated with the key. This supports |
-// the legacy web event |keyCode| field, and the VKEY_ values are chosen |
-// to match Windows/IE for compatibility. For printable characters, this |
-// may or may not be a layout-mapped value, imitating MS Windows: |
-// if the mapped key generates a character that has an associated VKEY_ |
-// code, then key_code_ is that code; if not, then key_code_ is the unmapped |
-// VKEY_ code. For example, US, Greek, Cyrillic, Japanese, etc. all use |
-// VKEY_Q for the key beside Tab, while French uses VKEY_A. The stored |
-// key_code_ is non-located (e.g. VKEY_SHIFT rather than VKEY_LSHIFT, |
-// VKEY_1 rather than VKEY_NUMPAD1). |
+// -- |DomKey key_| provides the meaning (character or action) of the key |
+// event, in the context of the active layout and modifiers. It corresponds |
+// to DOM UI Events KeyboardEvent |key| values. |
+// http://www.w3.org/TR/DOM-Level-3-Events-key/ |
+// -- |KeyboardCode key_code_| supports the legacy web event |keyCode| field, |
+// and its VKEY_ values are chosen to match Windows/IE for compatibility. |
+// For printable characters, this may or may not be a layout-mapped value, |
+// imitating MS Windows: if the mapped key generates a character that has |
+// an associated VKEY_ code, then key_code_ is that code; if not, then |
+// key_code_ is the unmapped VKEY_ code. For example, US, Greek, Cyrillic, |
+// Japanese, etc. all use VKEY_Q for the key beside Tab, while French uses |
+// VKEY_A. The stored key_code_ is non-located (e.g. VKEY_SHIFT rather than |
+// VKEY_LSHIFT, VKEY_1 rather than VKEY_NUMPAD1). |
// |
// For a character event, |
-// -- is_char_ is true. |
-// -- type() is ET_KEY_PRESSED. |
-// -- code_ is DomCode::NONE. |
-// -- key_ is DomKey::CHARACTER and character_ is a UTF-16 code point. |
-// -- key_code_ is conflated with character_ by some code, because both |
-// arrive in the wParam field of a Windows event. |
+// -- |bool is_char_| is true. |
+// -- |EventType Event::type()| is ET_KEY_PRESSED. |
+// -- |DomCode code_| is DomCode::NONE. |
+// -- |DomKey key_| is a UTF-16 code point. |
+// -- |KeyboardCode key_code_| is conflated with the character-valued key_ |
+// by some code, because both arrive in the wParam field of a Windows event. |
// |
class EVENTS_EXPORT KeyEvent : public Event { |
public: |
@@ -701,7 +699,8 @@ class EVENTS_EXPORT KeyEvent : public Event { |
// (WM_CHAR). Other systems have only keystroke events. |
explicit KeyEvent(const base::NativeEvent& native_event); |
- // Create a keystroke event. |
+ // Create a keystroke event from a legacy KeyboardCode. |
+ // This should not be used in new code. |
KeyEvent(EventType type, KeyboardCode key_code, int flags); |
// Create a fully defined keystroke event. |
@@ -710,7 +709,6 @@ class EVENTS_EXPORT KeyEvent : public Event { |
DomCode code, |
int flags, |
DomKey key, |
- base::char16 character, |
base::TimeDelta time_stamp); |
// Create a character event. |
@@ -744,7 +742,9 @@ class EVENTS_EXPORT KeyEvent : public Event { |
// which allows an I18N virtual keyboard to fabricate a keyboard event that |
// does not have a corresponding KeyboardCode (example: U+00E1 Latin small |
// letter A with acute, U+0410 Cyrillic capital letter A). |
- void set_character(base::char16 character) { character_ = character; } |
+ void set_character(base::char16 character) { |
+ key_ = DomKey::FromCharacter(character); |
+ } |
// Gets the character generated by this key event. It only supports Unicode |
// BMP characters. |
@@ -760,6 +760,7 @@ class EVENTS_EXPORT KeyEvent : public Event { |
base::char16 GetText() const; |
// Gets the platform key code. For XKB, this is the xksym value. |
+ // This should not be used in new code. |
void set_platform_keycode(uint32 keycode) { platform_keycode_ = keycode; } |
uint32 platform_keycode() const { return platform_keycode_; } |
@@ -810,7 +811,7 @@ class EVENTS_EXPORT KeyEvent : public Event { |
void set_is_char(bool is_char) { is_char_ = is_char; } |
private: |
- // Determine key_ and character_ on a keystroke event from code_ and flags(). |
+ // Determine key_ on a keystroke event from code_ and flags(). |
void ApplyLayout() const; |
KeyboardCode key_code_; |
@@ -823,13 +824,13 @@ class EVENTS_EXPORT KeyEvent : public Event { |
DomCode code_; |
// True if this is a character event, false if this is a keystroke event. |
- bool is_char_; |
+ bool is_char_ = false; |
// The platform related keycode value. For XKB, it's keysym value. |
// For now, this is used for CharacterComposer in ChromeOS. |
- mutable uint32 platform_keycode_; |
+ mutable uint32 platform_keycode_ = 0; |
- // TODO(kpschoedel): refactor so that key_ and character_ are not mutable. |
+ // TODO(kpschoedel): refactor so that key_ is not mutable. |
// This requires defining the KeyEvent completely at construction rather |
// than lazily under GetCharacter(), which likely also means removing |
// the two 'incomplete' constructors. crbug.com/444045 |
@@ -837,20 +838,11 @@ class EVENTS_EXPORT KeyEvent : public Event { |
// DOM KeyboardEvent |key| |
// http://www.w3.org/TR/DOM-Level-3-Events-key/ |
// |
- // This value, together with character_, represents the meaning of a key. |
- // The value is DomKey::CHARACTER when the interpretation is a character. |
- // This, along with character_, is not necessarily initialized when the |
- // event is constructed; it may be set only if and when GetCharacter() |
- // or GetDomKey() is called. |
- mutable DomKey key_; |
- |
- // String of 'key' defined in DOM KeyboardEvent (e.g. 'a', 'รข') |
- // http://www.w3.org/TR/uievents/#keyboard-key-codes. |
- // |
- // This value represents the text that the key event will insert to input |
- // field. For key with modifier key, it may have specifial text. |
- // e.g. CTRL+A has '\x01'. |
- mutable base::char16 character_; |
+ // This value represents the meaning of a key, which is either a Unicode |
+ // character, or a named DomKey:: value. |
+ // This is not necessarily initialized when the event is constructed; |
+ // it may be set only if and when GetCharacter() or GetDomKey() is called. |
+ mutable DomKey key_ = DomKey::NONE; |
// Parts of our event handling require raw native events (see both the |
// windows and linux implementations of web_input_event in content/). Because |