diff options
author | yusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 03:47:17 +0000 |
---|---|---|
committer | yusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-17 03:47:17 +0000 |
commit | c7d8714291097ee1256d8932f10f027aac4e8d85 (patch) | |
tree | efe7893697039bbf356e1fb822688f8e7a5c2494 /ui/base | |
parent | b97462b1fe8588d8ba569e265938368142c1ce66 (diff) | |
download | chromium_src-c7d8714291097ee1256d8932f10f027aac4e8d85.zip chromium_src-c7d8714291097ee1256d8932f10f027aac4e8d85.tar.gz chromium_src-c7d8714291097ee1256d8932f10f027aac4e8d85.tar.bz2 |
Move IME shortcut keys from X to Aura [part 2 of 3].
- Handle Alt+Shift in ash/accelerators/
- Modify accelerator_manager.cc so it could handle ET_*_RELEASE accelerators.
BUG=110408
TEST=ran aura_shell_unittests
Review URL: http://codereview.chromium.org/9361053
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122447 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base')
-rw-r--r-- | ui/base/accelerators/accelerator_manager.cc | 31 | ||||
-rw-r--r-- | ui/base/accelerators/accelerator_manager.h | 8 | ||||
-rw-r--r-- | ui/base/keycodes/keyboard_code_conversion_x.cc | 2 |
3 files changed, 34 insertions, 7 deletions
diff --git a/ui/base/accelerators/accelerator_manager.cc b/ui/base/accelerators/accelerator_manager.cc index 86d44ea..d2d70c9 100644 --- a/ui/base/accelerators/accelerator_manager.cc +++ b/ui/base/accelerators/accelerator_manager.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -10,7 +10,7 @@ namespace ui { -AcceleratorManager::AcceleratorManager() { +AcceleratorManager::AcceleratorManager() : last_event_type_(ET_KEY_PRESSED) { } AcceleratorManager::~AcceleratorManager() { @@ -52,19 +52,23 @@ void AcceleratorManager::UnregisterAll(AcceleratorTarget* target) { } bool AcceleratorManager::Process(const Accelerator& accelerator) { + bool result = false; AcceleratorMap::iterator map_iter = accelerators_.find(accelerator); - if (map_iter != accelerators_.end()) { + if (map_iter != accelerators_.end() && ShouldHandle(accelerator)) { // We have to copy the target list here, because an AcceleratorPressed // event handler may modify the list. AcceleratorTargetList targets(map_iter->second); for (AcceleratorTargetList::iterator iter = targets.begin(); iter != targets.end(); ++iter) { if ((*iter)->CanHandleAccelerators() && - (*iter)->AcceleratorPressed(accelerator)) - return true; + (*iter)->AcceleratorPressed(accelerator)) { + result = true; + break; + } } } - return false; + last_event_type_ = accelerator.type(); + return result; } AcceleratorTarget* AcceleratorManager::GetCurrentTarget( @@ -75,4 +79,19 @@ AcceleratorTarget* AcceleratorManager::GetCurrentTarget( return map_iter->second.front(); } +bool AcceleratorManager::ShouldHandle(const Accelerator& accelerator) const { + if (accelerator.type() != ET_KEY_RELEASED && + accelerator.type() != ET_TRANSLATED_KEY_RELEASE) { + return true; + } + // This check is necessary e.g. not to process the Shift+Alt+ET_KEY_RELEASED + // Accelerator for Chrome OS (see ash/accelerators/accelerator_controller.cc) + // when Shift+Alt+Tab is pressed and then Tab is released. + if (last_event_type_ == ET_KEY_PRESSED || + last_event_type_ == ET_TRANSLATED_KEY_PRESS) { + return true; + } + return false; +} + } // namespace ui diff --git a/ui/base/accelerators/accelerator_manager.h b/ui/base/accelerators/accelerator_manager.h index 50c73c0..c54ea1d 100644 --- a/ui/base/accelerators/accelerator_manager.h +++ b/ui/base/accelerators/accelerator_manager.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -11,6 +11,7 @@ #include "base/basictypes.h" #include "ui/base/accelerators/accelerator.h" +#include "ui/base/events.h" #include "ui/base/ui_export.h" namespace ui { @@ -52,11 +53,16 @@ class UI_EXPORT AcceleratorManager { AcceleratorTarget* GetCurrentTarget(const Accelerator& accelertor) const; private: + bool ShouldHandle(const Accelerator& accelerator) const; + // The accelerators and associated targets. typedef std::list<AcceleratorTarget*> AcceleratorTargetList; typedef std::map<Accelerator, AcceleratorTargetList> AcceleratorMap; AcceleratorMap accelerators_; + // An event passed to Process() last time. + EventType last_event_type_; + DISALLOW_COPY_AND_ASSIGN(AcceleratorManager); }; diff --git a/ui/base/keycodes/keyboard_code_conversion_x.cc b/ui/base/keycodes/keyboard_code_conversion_x.cc index a1bb6ec..ecb27a4 100644 --- a/ui/base/keycodes/keyboard_code_conversion_x.cc +++ b/ui/base/keycodes/keyboard_code_conversion_x.cc @@ -273,6 +273,8 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) { case XK_Control_L: case XK_Control_R: return VKEY_CONTROL; + case XK_Meta_L: + case XK_Meta_R: case XK_Alt_L: case XK_Alt_R: return VKEY_MENU; |