| Index: ui/events/event.h
|
| diff --git a/ui/events/event.h b/ui/events/event.h
|
| index 57871944c0655c5e6e49c0fed482e13b979c89d1..13fc9edce830637c71210623641b7f496f5db092 100644
|
| --- a/ui/events/event.h
|
| +++ b/ui/events/event.h
|
| @@ -27,6 +27,7 @@ class Transform;
|
| namespace ui {
|
| class EventTarget;
|
| enum class DomCode;
|
| +enum class DomKey;
|
|
|
| class EVENTS_EXPORT Event {
|
| public:
|
| @@ -585,25 +586,38 @@ class EVENTS_EXPORT ExtendedKeyEventData {
|
| //
|
| // For a keystroke event,
|
| // -- is_char_ is false.
|
| -// -- type() can be any one of ET_KEY_PRESSED, ET_KEY_RELEASED,
|
| +// -- Event::type() can be any one of ET_KEY_PRESSED, ET_KEY_RELEASED,
|
| // ET_TRANSLATED_KEY_PRESS, or ET_TRANSLATED_KEY_RELEASE.
|
| -// -- character_ functions as a bypass or cache for GetCharacter().
|
| -// -- key_code_ is a VKEY_ value associated with the key. For printable
|
| -// characters, this may or may not be a mapped value, imitating MS Windows:
|
| +// -- code_ and 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.
|
| +// - 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.
|
| -// -- code_ is in one-to-one correspondence with a physical keyboard
|
| -// location, and does not vary depending on key layout.
|
| //
|
| // For a character event,
|
| // -- is_char_ is true.
|
| // -- type() is ET_KEY_PRESSED.
|
| -// -- character_ is a UTF-16 character value.
|
| +// -- 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.
|
| -// -- code_ is DomCode::NONE.
|
| //
|
| class EVENTS_EXPORT KeyEvent : public Event {
|
| public:
|
| @@ -615,6 +629,14 @@ class EVENTS_EXPORT KeyEvent : public Event {
|
| // Create a keystroke event.
|
| KeyEvent(EventType type, KeyboardCode key_code, int flags);
|
|
|
| + // Create a fully defined keystroke event.
|
| + KeyEvent(EventType type,
|
| + KeyboardCode key_code,
|
| + DomCode code,
|
| + int flags,
|
| + DomKey key,
|
| + base::char16 character);
|
| +
|
| // Create a character event.
|
| KeyEvent(base::char16 character, KeyboardCode key_code, int flags);
|
|
|
| @@ -698,6 +720,9 @@ class EVENTS_EXPORT KeyEvent : public Event {
|
| DomCode code() const { return code_; };
|
| std::string GetCodeString() const;
|
|
|
| + // Returns the DOM .key (layout meaning) for a keystroke event.
|
| + DomKey GetDomKey() const;
|
| +
|
| // Normalizes flags_ so that it describes the state after the event.
|
| // (Native X11 event flags describe the state before the event.)
|
| void NormalizeFlags();
|
| @@ -718,6 +743,9 @@ class EVENTS_EXPORT KeyEvent : public Event {
|
| // True if the key press originated from a 'right' key (VKEY_RSHIFT, etc.).
|
| bool IsRightSideKey() const;
|
|
|
| + // Determine key_ and character_ on a keystroke event from code_ and flags().
|
| + void ApplyLayout() const;
|
| +
|
| KeyboardCode key_code_;
|
|
|
| // DOM KeyboardEvent |code| (e.g. DomCode::KEY_A, DomCode::SPACE).
|
| @@ -734,6 +762,21 @@ class EVENTS_EXPORT KeyEvent : public Event {
|
| // For now, this is used for CharacterComposer in ChromeOS.
|
| uint32 platform_keycode_;
|
|
|
| + // TODO(kpschoedel): refactor so that key_ and character_ are not mutable.
|
| + // This requires defining the KeyEvent completely at construction rather
|
| + // than lazily under GetCharacter(), which likely also means removing
|
| + // the two 'incomplete' constructors.
|
| + //
|
| + // 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.
|
| //
|
|
|