diff options
Diffstat (limited to 'webkit/glue/webinputevent_linux.cc')
-rw-r--r-- | webkit/glue/webinputevent_linux.cc | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/webkit/glue/webinputevent_linux.cc b/webkit/glue/webinputevent_linux.cc index b48cb01..11e53ce 100644 --- a/webkit/glue/webinputevent_linux.cc +++ b/webkit/glue/webinputevent_linux.cc @@ -6,11 +6,16 @@ #include "webkit/glue/webinputevent.h" -#include "webkit/glue/event_conversion.h" - #include "KeyboardCodes.h" #include "KeyCodeConversion.h" +#include "webkit/glue/event_conversion.h" + +// This header is out of alphabetical order, but event_conversion.h pulls +// in more webkit headers that redefine LOG so I need to undef afterwards. +#undef LOG +#include "base/logging.h" + #include <gdk/gdk.h> #include <gdk/gdkkeysyms.h> #include <gtk/gtkversion.h> @@ -134,6 +139,11 @@ WebMouseWheelEvent::WebMouseWheelEvent(const GdkEventScroll* event) { WebKeyboardEvent::WebKeyboardEvent(const GdkEventKey* event) { modifiers = GdkStateToWebEventModifiers(event->state); + // GDK only exposes key press and release events. By contrast, + // WebKeyboardEvent matches Windows and wants key down/up events along with a + // separate CHAR event. + // We require the caller to simulate the CHAR event manually. See + // test_shell's webwidget_host for an example. switch (event->type) { case GDK_KEY_RELEASE: type = KEY_UP; @@ -142,9 +152,16 @@ WebKeyboardEvent::WebKeyboardEvent(const GdkEventKey* event) { type = KEY_DOWN; break; default: + NOTREACHED(); break; } key_code = WebCore::windowsKeyCodeForKeyEvent(event->keyval); + // GDK keys within the ASCII range are just ASCII. + if (event->keyval >= 0x20 && event->keyval < 0x7F) + text = event->keyval; + else + text = 0; + // TODO(tc): Do we need to set IS_AUTO_REPEAT or IS_KEYPAD? } |