Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Unified Diff: ui/views/controls/menu/menu_controller.cc

Issue 9224001: Fixes issue with accelerators when a menu is open (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes as suggested by oshima Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/controls/menu/menu_controller.cc
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index c166ab85f9f4e04e811f6ef9bd5022217e8a5cf9..55fdea3b4423d10171dcb997afd13530078675ea 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -25,6 +25,7 @@
#include "ui/views/widget/widget.h"
#if defined(USE_AURA)
+#include "ui/aura/client/accelerator_client.h"
#include "ui/aura/root_window.h"
#elif defined(TOOLKIT_USES_GTK)
#include "ui/base/keycodes/keyboard_code_conversion_gtk.h"
@@ -51,6 +52,10 @@ namespace views {
namespace {
+const int kModifierMask = (ui::EF_SHIFT_DOWN |
+ ui::EF_CONTROL_DOWN |
+ ui::EF_ALT_DOWN);
+
// Returns true if the mnemonic of |menu| matches key.
bool MatchesMnemonic(MenuItemView* menu, char16 key) {
return menu->GetMnemonic() == key;
@@ -863,8 +868,16 @@ bool MenuController::Dispatch(const MSG& msg) {
TranslateMessage(&msg);
return result;
}
- case WM_CHAR:
+ case WM_CHAR: {
+#if defined(USE_AURA)
+ ui::Accelerator accelerator(ui::KeyboardCodeFromNative(msg),
+ ui::EventFlagsFromNative(msg) & kModifierMask);
+ if (aura::client::GetAcceleratorClient() &&
+ aura::client::GetAcceleratorClient()->Process(accelerator))
+ return false;
+#endif
return !SelectByChar(static_cast<char16>(msg.wParam));
+ }
case WM_KEYUP:
return true;
@@ -903,11 +916,12 @@ base::MessagePumpDispatcher::DispatchStatus
aura::RootWindow::GetInstance()->GetDispatcher()->Dispatch(xev);
return base::MessagePumpDispatcher::EVENT_QUIT;
}
- switch (ui::EventTypeFromNative(xev)) {
- case ui::ET_KEY_PRESSED:
- if (!OnKeyDown(ui::KeyboardCodeFromNative(xev)))
- return base::MessagePumpDispatcher::EVENT_QUIT;
+ ui::KeyboardCode keycode = ui::KeyboardCodeFromNative(xev);
+ switch (ui::EventTypeFromNative(xev)) {
+ case ui::ET_KEY_PRESSED: {
+ if (!OnKeyDown(keycode))
+ return base::MessagePumpDispatcher::EVENT_QUIT;
// OnKeyDown may have set exit_type_.
// TODO(sky): This shouldn't be necessary if OnKeyDown returns correct
// value for space key on edit menu. Fix OnKeyDown and remove this.
@@ -915,9 +929,17 @@ base::MessagePumpDispatcher::DispatchStatus
if (exit_type_ != EXIT_NONE)
return base::MessagePumpDispatcher::EVENT_QUIT;
- return SelectByChar(ui::KeyboardCodeFromNative(xev)) ?
- base::MessagePumpDispatcher::EVENT_QUIT :
- base::MessagePumpDispatcher::EVENT_PROCESSED;
+ ui::Accelerator accelerator(keycode,
+ ui::EventFlagsFromNative(xev) & kModifierMask);
+ if (aura::client::GetAcceleratorClient() &&
+ aura::client::GetAcceleratorClient()->Process(accelerator))
+ return base::MessagePumpDispatcher::EVENT_QUIT;
+
+ if (SelectByChar(keycode))
+ return base::MessagePumpDispatcher::EVENT_QUIT;
+
+ return base::MessagePumpDispatcher::EVENT_PROCESSED;
oshima 2012/01/27 21:41:34 I think WM accelerator should be handled before ch
+ }
case ui::ET_KEY_RELEASED:
return base::MessagePumpDispatcher::EVENT_PROCESSED;
default:
« ui/aura/client/accelerator_client.h ('K') | « ui/aura/client/accelerator_client.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698