Index: content/browser/renderer_host/web_input_event_aura.cc |
diff --git a/content/browser/renderer_host/web_input_event_aura.cc b/content/browser/renderer_host/web_input_event_aura.cc |
index 69c8960fcd541a58f3376b0cc660bb8ce92b1566..a4cf12b0e51041a305be9a491011f1d83cef90e9 100644 |
--- a/content/browser/renderer_host/web_input_event_aura.cc |
+++ b/content/browser/renderer_host/web_input_event_aura.cc |
@@ -24,16 +24,20 @@ |
const base::NativeEvent& native_event); |
blink::WebGestureEvent MakeWebGestureEventFromNativeEvent( |
const base::NativeEvent& native_event); |
-#endif |
-#if defined(USE_X11) || defined(USE_OZONE) |
+#elif defined(USE_X11) |
+blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( |
+ ui::KeyEvent* event); |
+#elif defined(USE_OZONE) |
blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( |
ui::KeyEvent* event) { |
+ const base::NativeEvent& native_event = event->native_event(); |
+ ui::EventType type = ui::EventTypeFromNative(native_event); |
blink::WebKeyboardEvent webkit_event; |
webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
- switch (event->type()) { |
+ switch (type) { |
case ui::ET_KEY_PRESSED: |
webkit_event.type = event->is_char() ? blink::WebInputEvent::Char : |
blink::WebInputEvent::RawKeyDown; |
@@ -48,16 +52,31 @@ |
if (webkit_event.modifiers & blink::WebInputEvent::AltKey) |
webkit_event.isSystemKey = true; |
- webkit_event.windowsKeyCode = event->GetLocatedWindowsKeyboardCode(); |
- webkit_event.nativeKeyCode = event->platform_keycode(); |
- webkit_event.unmodifiedText[0] = event->GetUnmodifiedText(); |
- webkit_event.text[0] = event->GetText(); |
+ wchar_t character = ui::KeyboardCodeFromNative(native_event); |
+ webkit_event.windowsKeyCode = character; |
+ webkit_event.nativeKeyCode = character; |
+ |
+ if (webkit_event.windowsKeyCode == ui::VKEY_RETURN) |
+ webkit_event.unmodifiedText[0] = '\r'; |
+ else |
+ webkit_event.unmodifiedText[0] = ui::GetCharacterFromKeyCode( |
+ ui::KeyboardCodeFromNative(native_event), |
+ ui::EventFlagsFromNative(native_event)); |
+ |
+ if (webkit_event.modifiers & blink::WebInputEvent::ControlKey) { |
+ webkit_event.text[0] = ui::GetControlCharacterForKeycode( |
+ webkit_event.windowsKeyCode, |
+ webkit_event.modifiers & blink::WebInputEvent::ShiftKey); |
+ } else { |
+ webkit_event.text[0] = webkit_event.unmodifiedText[0]; |
+ } |
webkit_event.setKeyIdentifierFromWindowsKeyCode(); |
return webkit_event; |
} |
- |
+#endif |
+#if defined(USE_X11) || defined(USE_OZONE) |
blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( |
ui::ScrollEvent* event) { |
blink::WebMouseWheelEvent webkit_event; |
@@ -221,6 +240,9 @@ |
} |
blink::WebKeyboardEvent MakeWebKeyboardEvent(ui::KeyEvent* event) { |
+ if (!event->HasNativeEvent()) |
+ return blink::WebKeyboardEvent(); |
+ |
// Windows can figure out whether or not to construct a RawKeyDown or a Char |
// WebInputEvent based on the type of message carried in |
// event->native_event(). X11 is not so fortunate, there is no separate |
@@ -228,9 +250,6 @@ |
// is_char() == true. We need to pass the ui::KeyEvent to the X11 function |
// to detect this case so the right event type can be constructed. |
#if defined(OS_WIN) |
- if (!event->HasNativeEvent()) |
- return blink::WebKeyboardEvent(); |
- |
// Key events require no translation by the aura system. |
return MakeWebKeyboardEventFromNativeEvent(event->native_event()); |
#else |