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

Unified Diff: ui/events/event.h

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/base/ime/chromeos/character_composer_unittest.cc ('k') | ui/events/event.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ui/base/ime/chromeos/character_composer_unittest.cc ('k') | ui/events/event.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698