summaryrefslogtreecommitdiffstats
path: root/ui/base
diff options
context:
space:
mode:
authoryusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 03:47:17 +0000
committeryusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-17 03:47:17 +0000
commitc7d8714291097ee1256d8932f10f027aac4e8d85 (patch)
treeefe7893697039bbf356e1fb822688f8e7a5c2494 /ui/base
parentb97462b1fe8588d8ba569e265938368142c1ce66 (diff)
downloadchromium_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.cc31
-rw-r--r--ui/base/accelerators/accelerator_manager.h8
-rw-r--r--ui/base/keycodes/keyboard_code_conversion_x.cc2
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;