Index: views/events/event.h |
diff --git a/views/events/event.h b/views/events/event.h |
index 4173d5382cacc0d3b7dd744cb39121192cb06077..ac52a8a3d3cf5961f912e25db2779ed5e006cc55 100644 |
--- a/views/events/event.h |
+++ b/views/events/event.h |
@@ -289,14 +289,44 @@ class KeyEvent : public Event { |
// Creates a new KeyEvent synthetically (i.e. not in response to an input |
// event from the host environment). This is typically only used in testing as |
// some metadata obtainable from the underlying native event is not present. |
- // TODO(beng): see if we can kill this. |
+ // It's also used by input methods to fabricate keyboard events. |
KeyEvent(ui::EventType type, |
ui::KeyboardCode key_code, |
int event_flags); |
ui::KeyboardCode key_code() const { return key_code_; } |
+ // Gets the character generated by this key event. It only supports Unicode |
+ // BMP characters. |
+ uint16 GetCharacter() const; |
+ |
+ // Gets the character generated by this key event ignoring concurrently-held |
+ // modifiers (except shift). |
+ uint16 GetUnmodifiedCharacter() const; |
+ |
private: |
+ // A helper function to get the character generated by a key event in a |
+ // platform independent way. It supports control characters as well. |
+ // It assumes a US keyboard layout is used, so it may only be used when there |
+ // is no native event or no better way to get the character. |
+ // For example, if a virtual keyboard implementation can only generate key |
+ // events with key_code and flags information, then there is no way for us to |
+ // determine the actual character that should be generate by the key. Because |
+ // a key_code only represents a physical key on the keyboard, it has nothing |
+ // to do with the actual character printed on that key. In such case, the only |
+ // thing we can do is to assume that we are using a US keyboard and get the |
+ // character according to US keyboard layout definition. |
+ // If a virtual keyboard implementation wants to support other keyboard |
+ // layouts, that may generate different text for a certain key than on a US |
+ // keyboard, a special native event object should be introduced to carry extra |
+ // information to help determine the correct character. |
+ // Take XKeyEvent as an example, it contains not only keycode and modifier |
+ // flags but also group and other extra XKB information to help determine the |
+ // correct character. That's why we can use XLookupString() function to get |
+ // the correct text generated by a X key event (See how is GetCharacter() |
+ // implemented in event_x.cc). |
+ static uint16 GetCharacterFromKeyCode(ui::KeyboardCode key_code, int flags); |
+ |
ui::KeyboardCode key_code_; |
DISALLOW_COPY_AND_ASSIGN(KeyEvent); |