Index: components/view_manager/display_manager.cc |
diff --git a/components/view_manager/display_manager.cc b/components/view_manager/display_manager.cc |
index cf3f113ac4f31c5c2810402a5b909d45ad2276f9..c3d1b23954e054b1fda9a67dcfdac9d2fcc21644 100644 |
--- a/components/view_manager/display_manager.cc |
+++ b/components/view_manager/display_manager.cc |
@@ -278,6 +278,39 @@ void DefaultDisplayManager::DispatchEvent(ui::Event* event) { |
default: |
break; |
} |
+ |
+#if defined(USE_X11) |
+ // We want to emulate the WM_CHAR generation behaviour of Windows. |
Shu Chen
2015/07/17 01:54:08
I don't recommend to emulate the WM_CHAR, because
Elliot Glaysher
2015/07/17 17:52:35
This is part of the patch which was a revert. That
|
+ // |
+ // On Linux, we've previously inserted characters by having |
+ // InputMethodAuraLinux take all key down events and send a character event |
+ // to the TextInputClient. This causes a mismatch in code that has to be |
+ // shared between Windows and Linux, including blink code. Now that we're |
+ // trying to have one way of doing things, we need to standardize on and |
+ // emulate Windows character events. |
+ // |
+ // This is equivalent to what we're doing in the current Linux port, but |
+ // done once instead of done multiple times in different places. |
+ if (event->type() == ui::ET_KEY_PRESSED) { |
+ ui::KeyEvent* key_press_event = static_cast<ui::KeyEvent*>(event); |
+ ui::KeyEvent char_event(key_press_event->GetCharacter(), |
+ key_press_event->key_code(), |
+ key_press_event->flags()); |
+ |
+ DCHECK_EQ(key_press_event->GetCharacter(), char_event.GetCharacter()); |
+ DCHECK_EQ(key_press_event->key_code(), char_event.key_code()); |
+ DCHECK_EQ(key_press_event->flags(), char_event.flags()); |
+ |
+ char_event.SetExtendedKeyEventData( |
+ make_scoped_ptr(new mojo::MojoExtendedKeyEventData( |
+ key_press_event->GetLocatedWindowsKeyboardCode(), |
+ key_press_event->GetText(), |
+ key_press_event->GetUnmodifiedText()))); |
+ char_event.set_platform_keycode(key_press_event->platform_keycode()); |
+ |
+ delegate_->OnEvent(mojo::Event::From(char_event)); |
+ } |
+#endif |
} |
void DefaultDisplayManager::OnCloseRequest() { |