Index: ui/views/controls/menu/menu_message_pump_dispatcher_win.cc |
diff --git a/ui/views/controls/menu/menu_message_pump_dispatcher_win.cc b/ui/views/controls/menu/menu_message_pump_dispatcher_win.cc |
index 8f905d029aeca1841f28ce83c694c8afe7828e4d..f6bfe43fcac2980121cda0251ab4f83c40ce9473 100644 |
--- a/ui/views/controls/menu/menu_message_pump_dispatcher_win.cc |
+++ b/ui/views/controls/menu/menu_message_pump_dispatcher_win.cc |
@@ -47,19 +47,23 @@ uint32_t MenuMessagePumpDispatcher::Dispatch(const MSG& msg) { |
break; |
} |
- // NOTE: focus wasn't changed when the menu was shown. As such, don't |
- // dispatch key events otherwise the focused window will get the events. |
case WM_KEYDOWN: { |
- bool result = |
- menu_controller_->OnKeyDown(ui::KeyboardCodeFromNative(msg)); |
- TranslateMessage(&msg); |
+ // We do nothing here as the key event will be processed by |
+ // MenuEventFilter::OnKeyEvent() as a result of the following dispatch |
+ // call. The MenuEventFilter will stop the event propagation, so the |
+ // focused window will not get the event. |
+ // |
+ // NOTE: We don't call TranslateMessage() here as we don't want to |
+ // produce a WM_CHAR which will result in inserting a character in a |
+ // Textfield while the menu is still open or has just exited. |
+ // MenuEventFilter::OnKeyEvent() takes care of everything. |
+ DispatchMessage(&msg); |
should_perform_default = false; |
- should_quit = !result; |
break; |
} |
case WM_CHAR: { |
- should_quit = menu_controller_->SelectByChar( |
- static_cast<base::char16>(msg.wParam)); |
+ // We do nothing here. Selecting a menu item by Char is done at the |
+ // MenuEventFilter::OnKeyEvent(). |
should_perform_default = false; |
break; |
} |