Index: ui/aura/test/event_generator.cc |
diff --git a/ui/aura/test/event_generator.cc b/ui/aura/test/event_generator.cc |
index ebad4f31158fca402ddc706f398c6c7e1fbbaab1..a2eb897daad5d2853beaaa66c9ad3e9699591ca8 100644 |
--- a/ui/aura/test/event_generator.cc |
+++ b/ui/aura/test/event_generator.cc |
@@ -13,12 +13,16 @@ |
#include "ui/base/x/x11_util.h" |
#endif |
+#if defined(OS_WIN) |
+#include "ui/base/keycodes/keyboard_code_conversion.h" |
+#endif |
+ |
namespace { |
class TestKeyEvent : public ui::KeyEvent { |
public: |
- TestKeyEvent(const base::NativeEvent& native_event, int flags) |
- : KeyEvent(native_event, false /* is_char */) { |
+ TestKeyEvent(const base::NativeEvent& native_event, int flags, bool is_char) |
+ : KeyEvent(native_event, is_char) { |
set_flags(flags); |
} |
}; |
@@ -309,17 +313,28 @@ void EventGenerator::DispatchKeyEvent(bool is_press, |
ui::KeyboardCode key_code, |
int flags) { |
#if defined(OS_WIN) |
+ UINT key_press = WM_KEYDOWN; |
+ uint16 character = ui::GetCharacterFromKeyCode(key_code, flags); |
+ if (is_press && character) { |
+ MSG native_event = { NULL, WM_KEYDOWN, key_code, 0 }; |
+ TestKeyEvent keyev(native_event, flags, false); |
+ Dispatch(keyev); |
+ // On Windows, WM_KEYDOWN event is followed by WM_CHAR with a character |
+ // if the key event cooresponds to a real character. |
+ key_press = WM_CHAR; |
+ key_code = static_cast<ui::KeyboardCode>(character); |
+ } |
MSG native_event = |
- { NULL, (is_press ? WM_KEYDOWN : WM_KEYUP), key_code, 0 }; |
- TestKeyEvent keyev(native_event, flags); |
+ { NULL, (is_press ? key_press : WM_KEYUP), key_code, 0 }; |
+ TestKeyEvent keyev(native_event, flags, key_press == WM_CHAR); |
#else |
ui::EventType type = is_press ? ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED; |
#if defined(USE_X11) |
scoped_ptr<XEvent> native_event(new XEvent); |
ui::InitXKeyEventForTesting(type, key_code, flags, native_event.get()); |
- TestKeyEvent keyev(native_event.get(), flags); |
+ TestKeyEvent keyev(native_event.get(), flags, false); |
#else |
- ui::KeyEvent keyev(type, key_code, flags); |
+ ui::KeyEvent keyev(type, key_code, flags, false); |
#endif // USE_X11 |
#endif // OS_WIN |
Dispatch(keyev); |