diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-03 18:27:44 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-03 18:27:44 +0000 |
commit | 9958c8ab6f76da35fbf30272b2b82d26bf823230 (patch) | |
tree | cab2771b559c9c791e0e4afd0d55fbe218b58e38 /webkit/glue/webinputevent.h | |
parent | df064db3c7284f8b3b7330dd332584e0aa462483 (diff) | |
download | chromium_src-9958c8ab6f76da35fbf30272b2b82d26bf823230.zip chromium_src-9958c8ab6f76da35fbf30272b2b82d26bf823230.tar.gz chromium_src-9958c8ab6f76da35fbf30272b2b82d26bf823230.tar.bz2 |
Reverting 10794.
Review URL: http://codereview.chromium.org/40027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10808 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webinputevent.h')
-rw-r--r-- | webkit/glue/webinputevent.h | 102 |
1 files changed, 35 insertions, 67 deletions
diff --git a/webkit/glue/webinputevent.h b/webkit/glue/webinputevent.h index c917dd1..5565478 100644 --- a/webkit/glue/webinputevent.h +++ b/webkit/glue/webinputevent.h @@ -6,11 +6,11 @@ #define WEBKIT_GLUE_WEBINPUTEVENT_H_ #include "base/basictypes.h" -#include "base/string16.h" #if defined(OS_WIN) #include <windows.h> #elif defined(OS_MACOSX) +#include <vector> #ifdef __OBJC__ @class NSEvent; @class NSView; @@ -19,7 +19,6 @@ class NSEvent; class NSView; #endif // __OBJC__ #elif defined(OS_LINUX) -#include <glib.h> typedef struct _GdkEventButton GdkEventButton; typedef struct _GdkEventMotion GdkEventMotion; typedef struct _GdkEventScroll GdkEventScroll; @@ -32,10 +31,6 @@ typedef struct _GdkEventKey GdkEventKey; // // The fields of these event classes roughly correspond to the fields required // by WebCore's platform event classes. -// -// WARNING! These classes must remain PODs (plain old data). They will be -// "serialized" by shipping their raw bytes across the wire, so they must not -// contain any non-bit-copyable member variables! // WebInputEvent -------------------------------------------------------------- @@ -43,17 +38,6 @@ class WebInputEvent { public: WebInputEvent() : modifiers(0) { } - // There are two schemes used for keyboard input. On Windows (and, - // interestingly enough, on Mac Carbon) there are two events for a keypress. - // One is a raw keydown, which provides the keycode only. If the app doesn't - // handle that, then the system runs key translation to create an event - // containing the generated character and pumps that event. In such a scheme, - // those two events are translated to RAW_KEY_DOWN and CHAR events - // respectively. In Cocoa and Gtk, key events contain both the keycode and any - // translation into actual text. In such a case, WebCore will eventually need - // to split the events (see disambiguateKeyDownEvent and its callers) but we - // don't worry about that here. We just use a different type (KEY_DOWN) to - // indicate this. enum Type { // WebMouseEvent MOUSE_DOWN, @@ -66,7 +50,6 @@ class WebInputEvent { MOUSE_WHEEL, // WebKeyboardEvent - RAW_KEY_DOWN, KEY_DOWN, KEY_UP, CHAR @@ -143,68 +126,53 @@ class WebMouseWheelEvent : public WebMouseEvent { // WebKeyboardEvent ----------------------------------------------------------- -// Caps on string lengths so we can make them static arrays and keep them PODs. -const size_t kTextLengthCap = 4; -// http://www.w3.org/TR/DOM-Level-3-Events/keyset.html lists the identifiers. -// The longest is 18 characters, so we'll round up to the next multiple of 4. -const size_t kIdentifierLengthCap = 20; - class WebKeyboardEvent : public WebInputEvent { public: - // |windows_key_code| is the Windows key code associated with this key event. - // Sometimes it's direct from the event (i.e. on Windows), sometimes it's via - // a mapping function. If you want a list, see - // webkit/port/platform/chromium/KeyboardCodes* . - int windows_key_code; - - // The actual key code genenerated by the platform. The DOM spec runs on - // Windows-equivalent codes (thus |windows_key_code| above) but it doesn't - // hurt to have this one around. - int native_key_code; - - // |text| is the text generated by this keystroke. |unmodified_text| is - // |text|, but unmodified by an concurrently-held modifiers (except shift). - // This is useful for working out shortcut keys. Linux and Windows guarantee - // one character per event. The Mac does not, but in reality that's all it - // ever gives. We're generous, and cap it a bit longer. - char16 text[kTextLengthCap]; - char16 unmodified_text[kTextLengthCap]; - - // This is a string identifying the key pressed. - char key_identifier[kIdentifierLengthCap]; - - // This identifies whether this event was tagged by the system as being a - // "system key" event (see - // http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx for details). - // Other platforms don't have this concept, but it's just easier to leave it - // always false than ifdef. - - bool system_key; - - // References to the original event. -#if defined(OS_WIN) - MSG actual_message; // Set to the current keyboard message. TODO(avi): remove + // The key_code field is the Windows key code associated with this key event. + // This sometimes matches the ASCII value of the key (for e.g. a-z) but + // officially ignores case, and has its own set of codes for control keys as + // well as other visible letters like punctuation. + // webkit/port/platform/chromium/KeyboardCodes* is an attempt at defining all + // of these keys, but it's not all the way there yet. (E.g., the Windows + // implementation there just passes through the code from the windows message + // directly.) + int key_code; + +#if defined(OS_MACOSX) + // text arrays extracted from the native event. On Mac, there may be + // multiple keys sent as a single event if the flags don't change. + std::vector<unsigned short> text; + std::vector<unsigned short> unmodified_text; + std::vector<unsigned short> key_identifier; +#elif defined(OS_WIN) + bool system_key; // Set if we receive a SYSKEYDOWN/WM_SYSKEYUP message. + MSG actual_message; // Set to the current keyboard message. +#elif defined(OS_LINUX) + // The unicode character, if available, corresponding to this key event. + // TODO(evanm): temporary hack for test_shell. Ideally we'd either manage + // to stuff everything into key_code, or make this field shared by all + // implementations, but this will have to do for now. + wchar_t text; #endif - WebKeyboardEvent() : windows_key_code(0), - native_key_code(0), - system_key(false) { - memset(&text, 0, sizeof(text)); - memset(&unmodified_text, 0, sizeof(unmodified_text)); - memset(&key_identifier, 0, sizeof(key_identifier)); + WebKeyboardEvent() + : key_code(0) #if defined(OS_WIN) + , system_key(false) { memset(&actual_message, 0, sizeof(actual_message)); -#endif } +#else + {} +#endif #if defined(OS_WIN) - explicit WebKeyboardEvent(HWND hwnd, UINT message, WPARAM wparam, - LPARAM lparam); + WebKeyboardEvent(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); #elif defined(OS_MACOSX) - explicit WebKeyboardEvent(NSEvent *event); + WebKeyboardEvent(NSEvent *event); #elif defined(OS_LINUX) explicit WebKeyboardEvent(const GdkEventKey* event); #endif }; + #endif // WEBKIT_GLUE_WEBINPUTEVENT_H_ |