summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryusukes@google.com <yusukes@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 07:22:05 +0000
committeryusukes@google.com <yusukes@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 07:22:05 +0000
commit375755b38db43f1e23742a3cad31efddf2111f18 (patch)
tree5032d960faf5b4406676589728fcf382351eb177
parentf3c06962021d87a78e9dc6662d99af06494ebd7c (diff)
downloadchromium_src-375755b38db43f1e23742a3cad31efddf2111f18.zip
chromium_src-375755b38db43f1e23742a3cad31efddf2111f18.tar.gz
chromium_src-375755b38db43f1e23742a3cad31efddf2111f18.tar.bz2
Process all global shortcuts for Ash after InputMethodEventFilter.
This CL is for crbug.com/123856 (Aura shell applies accelerators without giving apps the option of handling key events). Currently, shortcuts for IME/layout switching (Shift+Alt, Ctrl+space, and so on) are processed before InputMethodEventFilter, and other Ash global shortcuts are processed after the filter. This is for ensuring that the IME shortcuts always work even if an IME (or an IME extension - http://dev.chromium.org/developers/design-documents/extensions/proposed-changes/apis-under-development/input-method-editor) tries to consume the shortcuts. However, this strategy is not compatible with crbug.com/123856. In order to fix crbug.com/123856, we sometimes have to process an Ash global shortcut key (including IME ones) after the key is passed to a web page. This CL modifies accelerator_table.cc and shell.cc so that they process IME shortcuts after InputMethodEventFilter, and also simplifies ash/accelerators/ and ui/base/accelerators/accelerator_manager.cc by removing code for processing pre-IME shortcuts. BUG=123856 TEST=ran aura_shell_unittests and ui_unittests Review URL: https://chromiumcodereview.appspot.com/10155015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133642 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/accelerators/accelerator_controller.cc3
-rw-r--r--ash/accelerators/accelerator_controller_unittest.cc165
-rw-r--r--ash/accelerators/accelerator_dispatcher.cc3
-rw-r--r--ash/accelerators/accelerator_filter.cc4
-rw-r--r--ash/accelerators/accelerator_table.cc187
-rw-r--r--ash/accelerators/accelerator_table.h2
-rw-r--r--ash/accelerators/nested_dispatcher_controller_unittest.cc1
-rw-r--r--ash/shell.cc9
-rw-r--r--ui/base/accelerators/accelerator_manager.cc11
9 files changed, 121 insertions, 264 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
index 69fbc57..d545511 100644
--- a/ash/accelerators/accelerator_controller.cc
+++ b/ash/accelerators/accelerator_controller.cc
@@ -251,7 +251,8 @@ void AcceleratorController::Init() {
kAcceleratorData[i].shift,
kAcceleratorData[i].ctrl,
kAcceleratorData[i].alt);
- accelerator.set_type(kAcceleratorData[i].type);
+ accelerator.set_type(kAcceleratorData[i].trigger_on_press ?
+ ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED);
Register(accelerator, this);
CHECK(accelerators_.insert(
std::make_pair(accelerator, kAcceleratorData[i].action)).second);
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc
index 7d88bdb..c543edc 100644
--- a/ash/accelerators/accelerator_controller_unittest.cc
+++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -51,32 +51,12 @@ class TestTarget : public ui::AcceleratorTarget {
DISALLOW_COPY_AND_ASSIGN(TestTarget);
};
-class PostImeAccelerator : public ui::Accelerator {
+class ReleaseAccelerator : public ui::Accelerator {
public:
- PostImeAccelerator(ui::KeyboardCode keycode,
- bool shift_pressed, bool ctrl_pressed, bool alt_pressed)
- : ui::Accelerator(keycode, shift_pressed, ctrl_pressed, alt_pressed) {
- set_type(ui::ET_TRANSLATED_KEY_PRESS);
- }
-};
-typedef ui::Accelerator PreImeAccelerator;
-
-class PostImeReleaseAccelerator : public ui::Accelerator {
- public:
- PostImeReleaseAccelerator(ui::KeyboardCode keycode,
- bool shift_pressed,
- bool ctrl_pressed,
- bool alt_pressed)
- : ui::Accelerator(keycode, shift_pressed, ctrl_pressed, alt_pressed) {
- set_type(ui::ET_TRANSLATED_KEY_RELEASE);
- }
-};
-class PreImeReleaseAccelerator : public ui::Accelerator {
- public:
- PreImeReleaseAccelerator(ui::KeyboardCode keycode,
- bool shift_pressed,
- bool ctrl_pressed,
- bool alt_pressed)
+ ReleaseAccelerator(ui::KeyboardCode keycode,
+ bool shift_pressed,
+ bool ctrl_pressed,
+ bool alt_pressed)
: ui::Accelerator(keycode, shift_pressed, ctrl_pressed, alt_pressed) {
set_type(ui::ET_KEY_RELEASED);
}
@@ -385,7 +365,7 @@ TEST_F(AcceleratorControllerTest, Process) {
#if defined(OS_WIN) || defined(USE_X11)
TEST_F(AcceleratorControllerTest, ProcessOnce) {
- PostImeAccelerator accelerator_a(ui::VKEY_A, false, false, false);
+ ui::Accelerator accelerator_a(ui::VKEY_A, false, false, false);
TestTarget target;
GetController()->Register(accelerator_a, &target);
@@ -428,51 +408,51 @@ TEST_F(AcceleratorControllerTest, ProcessOnce) {
TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
// CycleBackward
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_F5, true, false, false)));
+ ui::Accelerator(ui::VKEY_F5, true, false, false)));
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_TAB, true, false, true)));
+ ui::Accelerator(ui::VKEY_TAB, true, false, true)));
// CycleForward
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_F5, false, false, false)));
+ ui::Accelerator(ui::VKEY_F5, false, false, false)));
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_TAB, false, false, true)));
+ ui::Accelerator(ui::VKEY_TAB, false, false, true)));
// Take screenshot / partial screenshot
// True should always be returned regardless of the existence of the delegate.
{
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_F5, false, true, false)));
+ ui::Accelerator(ui::VKEY_F5, false, true, false)));
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_PRINT, false, false, false)));
+ ui::Accelerator(ui::VKEY_PRINT, false, false, false)));
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_F5, true, true, false)));
+ ui::Accelerator(ui::VKEY_F5, true, true, false)));
DummyScreenshotDelegate* delegate = new DummyScreenshotDelegate;
GetController()->SetScreenshotDelegate(
scoped_ptr<ScreenshotDelegate>(delegate).Pass());
EXPECT_EQ(0, delegate->handle_take_screenshot_count());
EXPECT_EQ(0, delegate->handle_take_partial_screenshot_count());
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_F5, false, true, false)));
+ ui::Accelerator(ui::VKEY_F5, false, true, false)));
EXPECT_EQ(1, delegate->handle_take_screenshot_count());
EXPECT_EQ(0, delegate->handle_take_partial_screenshot_count());
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_PRINT, false, false, false)));
+ ui::Accelerator(ui::VKEY_PRINT, false, false, false)));
EXPECT_EQ(2, delegate->handle_take_screenshot_count());
EXPECT_EQ(0, delegate->handle_take_partial_screenshot_count());
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_F5, true, true, false)));
+ ui::Accelerator(ui::VKEY_F5, true, true, false)));
EXPECT_EQ(2, delegate->handle_take_screenshot_count());
EXPECT_EQ(1, delegate->handle_take_partial_screenshot_count());
}
// ToggleCapsLock
{
EXPECT_FALSE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_LWIN, true, false, false)));
+ ui::Accelerator(ui::VKEY_LWIN, true, false, false)));
DummyCapsLockDelegate* delegate = new DummyCapsLockDelegate(false);
GetController()->SetCapsLockDelegate(
scoped_ptr<CapsLockDelegate>(delegate).Pass());
EXPECT_EQ(0, delegate->handle_caps_lock_count());
EXPECT_FALSE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_LWIN, true, false, false)));
+ ui::Accelerator(ui::VKEY_LWIN, true, false, false)));
EXPECT_EQ(1, delegate->handle_caps_lock_count());
}
{
@@ -481,13 +461,13 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
scoped_ptr<CapsLockDelegate>(delegate).Pass());
EXPECT_EQ(0, delegate->handle_caps_lock_count());
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_LWIN, true, false, false)));
+ ui::Accelerator(ui::VKEY_LWIN, true, false, false)));
EXPECT_EQ(1, delegate->handle_caps_lock_count());
}
// Volume
- const PostImeAccelerator f8(ui::VKEY_F8, false, false, false);
- const PostImeAccelerator f9(ui::VKEY_F9, false, false, false);
- const PostImeAccelerator f10(ui::VKEY_F10, false, false, false);
+ const ui::Accelerator f8(ui::VKEY_F8, false, false, false);
+ const ui::Accelerator f9(ui::VKEY_F9, false, false, false);
+ const ui::Accelerator f10(ui::VKEY_F10, false, false, false);
{
EXPECT_FALSE(GetController()->Process(f8));
EXPECT_FALSE(GetController()->Process(f9));
@@ -526,11 +506,11 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
EXPECT_EQ(1, delegate->handle_volume_up_count());
EXPECT_EQ(f10, delegate->last_accelerator());
}
- const PostImeAccelerator volume_mute(
+ const ui::Accelerator volume_mute(
ui::VKEY_VOLUME_MUTE, false, false, false);
- const PostImeAccelerator volume_down(
+ const ui::Accelerator volume_down(
ui::VKEY_VOLUME_DOWN, false, false, false);
- const PostImeAccelerator volume_up(ui::VKEY_VOLUME_UP, false, false, false);
+ const ui::Accelerator volume_up(ui::VKEY_VOLUME_UP, false, false, false);
{
DummyVolumeControlDelegate* delegate =
new DummyVolumeControlDelegate(false);
@@ -567,8 +547,8 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
EXPECT_EQ(volume_up, delegate->last_accelerator());
}
// Brightness
- const PostImeAccelerator f6(ui::VKEY_F6, false, false, false);
- const PostImeAccelerator f7(ui::VKEY_F7, false, false, false);
+ const ui::Accelerator f6(ui::VKEY_F6, false, false, false);
+ const ui::Accelerator f7(ui::VKEY_F7, false, false, false);
{
EXPECT_FALSE(GetController()->Process(f6));
EXPECT_FALSE(GetController()->Process(f7));
@@ -601,9 +581,9 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
}
#if defined(OS_CHROMEOS)
// ui::VKEY_BRIGHTNESS_DOWN/UP are not defined on Windows.
- const PostImeAccelerator brightness_down(
+ const ui::Accelerator brightness_down(
ui::VKEY_BRIGHTNESS_DOWN, false, false, false);
- const PostImeAccelerator brightness_up(
+ const ui::Accelerator brightness_up(
ui::VKEY_BRIGHTNESS_UP, false, false, false);
{
DummyBrightnessControlDelegate* delegate =
@@ -637,50 +617,36 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
#if !defined(NDEBUG)
// RotateScreen
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_HOME, false, true, false)));
+ ui::Accelerator(ui::VKEY_HOME, false, true, false)));
// ToggleDesktopBackgroundMode
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_B, false, true, true)));
+ ui::Accelerator(ui::VKEY_B, false, true, true)));
#if !defined(OS_LINUX)
// ToggleDesktopFullScreen (not implemented yet on Linux)
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_F11, false, true, false)));
+ ui::Accelerator(ui::VKEY_F11, false, true, false)));
#endif // OS_LINUX
#endif // !NDEBUG
// Exit
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_Q, true, true ,false)));
+ ui::Accelerator(ui::VKEY_Q, true, true ,false)));
// New incognito window
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_N, true, true, false)));
+ ui::Accelerator(ui::VKEY_N, true, true, false)));
// New window
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_N, false, true, false)));
+ ui::Accelerator(ui::VKEY_N, false, true, false)));
#if defined(OS_CHROMEOS)
EXPECT_TRUE(GetController()->Process(
- PostImeAccelerator(ui::VKEY_L, true, true, false)));
+ ui::Accelerator(ui::VKEY_L, true, true, false)));
#endif
}
-TEST_F(AcceleratorControllerTest, GlobalAcceleratorsPreIme) {
- // Make sure post-IME shortcuts are ignored in the pre-IME phase.
- {
- const PreImeAccelerator f8(ui::VKEY_F8, false, false, false);
- const PostImeAccelerator f8_post(ui::VKEY_F8, false, false, false);
- DummyVolumeControlDelegate* delegate = new DummyVolumeControlDelegate(true);
- GetController()->SetVolumeControlDelegate(
- scoped_ptr<VolumeControlDelegate>(delegate).Pass());
- EXPECT_EQ(0, delegate->handle_volume_mute_count());
- EXPECT_FALSE(GetController()->Process(f8));
- EXPECT_EQ(0, delegate->handle_volume_mute_count());
- EXPECT_TRUE(GetController()->Process(f8_post));
- EXPECT_EQ(1, delegate->handle_volume_mute_count());
- }
-
+TEST_F(AcceleratorControllerTest, ImeGlobalAccelerators) {
// Test IME shortcuts.
{
const ui::Accelerator control_space(ui::VKEY_SPACE, false, true, false);
@@ -718,79 +684,34 @@ TEST_F(AcceleratorControllerTest, GlobalAcceleratorsPreIme) {
EXPECT_EQ(5, delegate->handle_switch_ime_count());
EXPECT_TRUE(GetController()->Process(shift_space));
EXPECT_EQ(6, delegate->handle_switch_ime_count());
-
- // Make sure pre-IME shortcuts are ignored in the post-IME phase.
- const PostImeAccelerator control_space_post(
- ui::VKEY_SPACE, false, true, false);
- const PostImeAccelerator convert_post(
- ui::VKEY_CONVERT, false, false, false);
- const PostImeAccelerator non_convert_post(
- ui::VKEY_NONCONVERT, false, false, false);
- const PostImeAccelerator wide_half_1_post(
- ui::VKEY_DBE_SBCSCHAR, false, false, false);
- const PostImeAccelerator wide_half_2_post(
- ui::VKEY_DBE_DBCSCHAR, false, false, false);
- const PostImeAccelerator hangul_post(ui::VKEY_HANGUL, false, false, false);
- const PostImeAccelerator shift_space_post(
- ui::VKEY_SPACE, true, false, false);
- EXPECT_EQ(1, delegate->handle_previous_ime_count());
- EXPECT_FALSE(GetController()->Process(control_space_post));
- EXPECT_EQ(1, delegate->handle_previous_ime_count());
- EXPECT_EQ(6, delegate->handle_switch_ime_count());
- EXPECT_FALSE(GetController()->Process(convert_post));
- EXPECT_EQ(6, delegate->handle_switch_ime_count());
- EXPECT_FALSE(GetController()->Process(non_convert_post));
- EXPECT_EQ(6, delegate->handle_switch_ime_count());
- EXPECT_FALSE(GetController()->Process(wide_half_1_post));
- EXPECT_EQ(6, delegate->handle_switch_ime_count());
- EXPECT_FALSE(GetController()->Process(wide_half_2_post));
- EXPECT_EQ(6, delegate->handle_switch_ime_count());
- EXPECT_FALSE(GetController()->Process(hangul_post));
- EXPECT_EQ(6, delegate->handle_switch_ime_count());
- EXPECT_FALSE(GetController()->Process(shift_space_post));
- EXPECT_EQ(6, delegate->handle_switch_ime_count());
}
// Test IME shortcuts that are triggered on key release.
{
- const PreImeAccelerator shift_alt_press(ui::VKEY_MENU, true, false, true);
- const PostImeAccelerator shift_alt_press_post(
- ui::VKEY_MENU, true, false, true);
- const PreImeReleaseAccelerator shift_alt(ui::VKEY_MENU, true, false, true);
-
- const PreImeAccelerator alt_shift_press(ui::VKEY_SHIFT, true, false, true);
- const PostImeAccelerator alt_shift_press_post(
- ui::VKEY_SHIFT, true, false, true);
- const PreImeReleaseAccelerator alt_shift(ui::VKEY_SHIFT, true, false, true);
+ const ui::Accelerator shift_alt_press(ui::VKEY_MENU, true, false, true);
+ const ReleaseAccelerator shift_alt(ui::VKEY_MENU, true, false, true);
+ const ui::Accelerator alt_shift_press(ui::VKEY_SHIFT, true, false, true);
+ const ReleaseAccelerator alt_shift(ui::VKEY_SHIFT, true, false, true);
DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true);
GetController()->SetImeControlDelegate(
scoped_ptr<ImeControlDelegate>(delegate).Pass());
EXPECT_EQ(0, delegate->handle_next_ime_count());
EXPECT_FALSE(GetController()->Process(shift_alt_press));
- EXPECT_FALSE(GetController()->Process(shift_alt_press_post));
EXPECT_FALSE(GetController()->Process(shift_alt)); // crbug.com/123720
EXPECT_EQ(1, delegate->handle_next_ime_count());
EXPECT_FALSE(GetController()->Process(alt_shift_press));
- EXPECT_FALSE(GetController()->Process(alt_shift_press_post));
EXPECT_FALSE(GetController()->Process(alt_shift)); // crbug.com/123720
EXPECT_EQ(2, delegate->handle_next_ime_count());
// We should NOT switch IME when e.g. Shift+Alt+X is pressed and X is
// released.
- const PreImeAccelerator shift_alt_x_press(ui::VKEY_X, true, false, true);
- const PostImeAccelerator shift_alt_x_press_post(
- ui::VKEY_X, true, false, true);
- const PreImeReleaseAccelerator shift_alt_x(ui::VKEY_X, true, false, true);
- const PostImeReleaseAccelerator shift_alt_x_post(
- ui::VKEY_X, true, false, true);
+ const ui::Accelerator shift_alt_x_press(ui::VKEY_X, true, false, true);
+ const ReleaseAccelerator shift_alt_x(ui::VKEY_X, true, false, true);
EXPECT_FALSE(GetController()->Process(shift_alt_press));
- EXPECT_FALSE(GetController()->Process(shift_alt_press_post));
EXPECT_FALSE(GetController()->Process(shift_alt_x_press));
- EXPECT_FALSE(GetController()->Process(shift_alt_x_press_post));
EXPECT_FALSE(GetController()->Process(shift_alt_x));
- EXPECT_FALSE(GetController()->Process(shift_alt_x_post));
EXPECT_FALSE(GetController()->Process(shift_alt));
EXPECT_EQ(2, delegate->handle_next_ime_count());
}
diff --git a/ash/accelerators/accelerator_dispatcher.cc b/ash/accelerators/accelerator_dispatcher.cc
index e8c7fb2..cc531ef 100644
--- a/ash/accelerators/accelerator_dispatcher.cc
+++ b/ash/accelerators/accelerator_dispatcher.cc
@@ -81,9 +81,6 @@ bool AcceleratorDispatcher::Dispatch(const base::NativeEvent& event) {
accelerator.set_type(ui::ET_KEY_RELEASED);
if (accelerator_controller->Process(accelerator))
return true;
- accelerator.set_type(aura::TranslatedKeyEvent(event, false).type());
- if (accelerator_controller->Process(accelerator))
- return true;
}
}
diff --git a/ash/accelerators/accelerator_filter.cc b/ash/accelerators/accelerator_filter.cc
index 049f94c..dcc95ba 100644
--- a/ash/accelerators/accelerator_filter.cc
+++ b/ash/accelerators/accelerator_filter.cc
@@ -35,10 +35,8 @@ AcceleratorFilter::~AcceleratorFilter() {
bool AcceleratorFilter::PreHandleKeyEvent(aura::Window* target,
aura::KeyEvent* event) {
const ui::EventType type = event->type();
- if (type != ui::ET_KEY_PRESSED && type != ui::ET_TRANSLATED_KEY_PRESS &&
- type != ui::ET_KEY_RELEASED && type != ui::ET_TRANSLATED_KEY_RELEASE) {
+ if (type != ui::ET_KEY_PRESSED && type != ui::ET_KEY_RELEASED)
return false;
- }
if (event->is_char())
return false;
diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc
index 043d637..eb1c5c3 100644
--- a/ash/accelerators/accelerator_table.cc
+++ b/ash/accelerators/accelerator_table.cc
@@ -9,94 +9,60 @@
namespace ash {
const AcceleratorData kAcceleratorData[] = {
- // EventType, KeyboardCode, shift, control, alt, AcceleratorAction
+ // trigger_on_press, KeyboardCode, shift, control, alt, AcceleratorAction
- // Accelerators that should be processed before a key is sent to an IME.
- { ui::ET_KEY_RELEASED, ui::VKEY_MENU, true, false, true, NEXT_IME },
- { ui::ET_KEY_RELEASED, ui::VKEY_SHIFT, true, false, true, NEXT_IME },
- { ui::ET_KEY_PRESSED, ui::VKEY_SPACE, false, true, false, PREVIOUS_IME },
+ { false, ui::VKEY_MENU, true, false, true, NEXT_IME },
+ { false, ui::VKEY_SHIFT, true, false, true, NEXT_IME },
+ { true, ui::VKEY_SPACE, false, true, false, PREVIOUS_IME },
// Shortcuts for Japanese IME.
- { ui::ET_KEY_PRESSED, ui::VKEY_CONVERT, false, false, false, SWITCH_IME },
- { ui::ET_KEY_PRESSED, ui::VKEY_NONCONVERT, false, false, false, SWITCH_IME },
- { ui::ET_KEY_PRESSED, ui::VKEY_DBE_SBCSCHAR, false, false, false,
- SWITCH_IME },
- { ui::ET_KEY_PRESSED, ui::VKEY_DBE_DBCSCHAR, false, false, false,
- SWITCH_IME },
+ { true, ui::VKEY_CONVERT, false, false, false, SWITCH_IME },
+ { true, ui::VKEY_NONCONVERT, false, false, false, SWITCH_IME },
+ { true, ui::VKEY_DBE_SBCSCHAR, false, false, false, SWITCH_IME },
+ { true, ui::VKEY_DBE_DBCSCHAR, false, false, false, SWITCH_IME },
// Shortcuts for Koren IME.
- { ui::ET_KEY_PRESSED, ui::VKEY_HANGUL, false, false, false, SWITCH_IME },
- { ui::ET_KEY_PRESSED, ui::VKEY_SPACE, true, false, false, SWITCH_IME },
+ { true, ui::VKEY_HANGUL, false, false, false, SWITCH_IME },
+ { true, ui::VKEY_SPACE, true, false, false, SWITCH_IME },
- // Accelerators that should be processed after a key is sent to an IME.
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_TAB, false, false, true,
- CYCLE_FORWARD_MRU },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_TAB, true, false, true,
- CYCLE_BACKWARD_MRU },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, false, false, false,
- CYCLE_FORWARD_LINEAR },
+ { true, ui::VKEY_TAB, false, false, true, CYCLE_FORWARD_MRU },
+ { true, ui::VKEY_TAB, true, false, true, CYCLE_BACKWARD_MRU },
+ { true, ui::VKEY_F5, false, false, false, CYCLE_FORWARD_LINEAR },
#if defined(OS_CHROMEOS)
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_BRIGHTNESS_DOWN, false, false, false,
- BRIGHTNESS_DOWN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_BRIGHTNESS_UP, false, false, false,
- BRIGHTNESS_UP },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_L, true, true, false, LOCK_SCREEN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_M, false, true, false,
- OPEN_FILE_MANAGER },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_T, false, true, true, OPEN_CROSH },
+ { true, ui::VKEY_BRIGHTNESS_DOWN, false, false, false, BRIGHTNESS_DOWN },
+ { true, ui::VKEY_BRIGHTNESS_UP, false, false, false, BRIGHTNESS_UP },
+ { true, ui::VKEY_L, true, true, false, LOCK_SCREEN },
+ { true, ui::VKEY_M, false, true, false, OPEN_FILE_MANAGER },
+ { true, ui::VKEY_T, false, true, true, OPEN_CROSH },
#endif
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_Q, true, true, false, EXIT },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_N, true, true, false,
- NEW_INCOGNITO_WINDOW },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_N, false, true, false, NEW_WINDOW },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, true, false, false,
- CYCLE_BACKWARD_LINEAR },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, false, true, false,
- TAKE_SCREENSHOT },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, true, true, false,
- TAKE_PARTIAL_SCREENSHOT },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_PRINT, false, false, false,
- TAKE_SCREENSHOT },
+ { true, ui::VKEY_Q, true, true, false, EXIT },
+ { true, ui::VKEY_N, true, true, false, NEW_INCOGNITO_WINDOW },
+ { true, ui::VKEY_N, false, true, false, NEW_WINDOW },
+ { true, ui::VKEY_F5, true, false, false, CYCLE_BACKWARD_LINEAR },
+ { true, ui::VKEY_F5, false, true, false, TAKE_SCREENSHOT },
+ { true, ui::VKEY_F5, true, true, false, TAKE_PARTIAL_SCREENSHOT },
+ { true, ui::VKEY_PRINT, false, false, false, TAKE_SCREENSHOT },
// On Chrome OS, Search key is mapped to LWIN.
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_LWIN, false, false, false,
- SEARCH_KEY },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_LWIN, true, false, false,
- TOGGLE_CAPS_LOCK },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F6, false, false, false,
- BRIGHTNESS_DOWN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F7, false, false, false,
- BRIGHTNESS_UP },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F8, false, false, false,
- VOLUME_MUTE },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_MUTE, false, false, false,
- VOLUME_MUTE },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F9, false, false, false,
- VOLUME_DOWN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_DOWN, false, false, false,
- VOLUME_DOWN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F10, false, false, false, VOLUME_UP },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_UP, false, false, false,
- VOLUME_UP },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_L, true, false, true,
- FOCUS_LAUNCHER },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_S, true, false, true, FOCUS_TRAY },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F1, true, true, false, SHOW_OAK },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_1, false, false, true,
- SELECT_WIN_0 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_2, false, false, true,
- SELECT_WIN_1 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_3, false, false, true,
- SELECT_WIN_2 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_4, false, false, true,
- SELECT_WIN_3 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_5, false, false, true,
- SELECT_WIN_4 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_6, false, false, true,
- SELECT_WIN_5 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_7, false, false, true,
- SELECT_WIN_6 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_8, false, false, true,
- SELECT_WIN_7 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_9, false, false, true,
- SELECT_LAST_WIN },
+ { true, ui::VKEY_LWIN, false, false, false, SEARCH_KEY },
+ { true, ui::VKEY_LWIN, true, false, false, TOGGLE_CAPS_LOCK },
+ { true, ui::VKEY_F6, false, false, false, BRIGHTNESS_DOWN },
+ { true, ui::VKEY_F7, false, false, false, BRIGHTNESS_UP },
+ { true, ui::VKEY_F8, false, false, false, VOLUME_MUTE },
+ { true, ui::VKEY_VOLUME_MUTE, false, false, false, VOLUME_MUTE },
+ { true, ui::VKEY_F9, false, false, false, VOLUME_DOWN },
+ { true, ui::VKEY_VOLUME_DOWN, false, false, false, VOLUME_DOWN },
+ { true, ui::VKEY_F10, false, false, false, VOLUME_UP },
+ { true, ui::VKEY_VOLUME_UP, false, false, false, VOLUME_UP },
+ { true, ui::VKEY_L, true, false, true, FOCUS_LAUNCHER },
+ { true, ui::VKEY_S, true, false, true, FOCUS_TRAY },
+ { true, ui::VKEY_F1, true, true, false, SHOW_OAK },
+ { true, ui::VKEY_1, false, false, true, SELECT_WIN_0 },
+ { true, ui::VKEY_2, false, false, true, SELECT_WIN_1 },
+ { true, ui::VKEY_3, false, false, true, SELECT_WIN_2 },
+ { true, ui::VKEY_4, false, false, true, SELECT_WIN_3 },
+ { true, ui::VKEY_5, false, false, true, SELECT_WIN_4 },
+ { true, ui::VKEY_6, false, false, true, SELECT_WIN_5 },
+ { true, ui::VKEY_7, false, false, true, SELECT_WIN_6 },
+ { true, ui::VKEY_8, false, false, true, SELECT_WIN_7 },
+ { true, ui::VKEY_9, false, false, true, SELECT_LAST_WIN },
// We need the number keys with and without shift since the French keyboard
// does not have explicit number keys. Instead they have to press
@@ -104,49 +70,30 @@ const AcceleratorData kAcceleratorData[] = {
// functionality, we should think about either assembling this table
// dynamically - or by decoding the keys properly (which is of course in
// conflict with other keyboards since the Shift+ is missing then).
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_1, true, false, true,
- SELECT_WIN_0 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_2, true, false, true,
- SELECT_WIN_1 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_3, true, false, true,
- SELECT_WIN_2 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_4, true, false, true,
- SELECT_WIN_3 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_5, true, false, true,
- SELECT_WIN_4 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_6, true, false, true,
- SELECT_WIN_5 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_7, true, false, true,
- SELECT_WIN_6 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_8, true, false, true,
- SELECT_WIN_7 },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_9, true, false, true,
- SELECT_LAST_WIN },
+ { true, ui::VKEY_1, true, false, true, SELECT_WIN_0 },
+ { true, ui::VKEY_2, true, false, true, SELECT_WIN_1 },
+ { true, ui::VKEY_3, true, false, true, SELECT_WIN_2 },
+ { true, ui::VKEY_4, true, false, true, SELECT_WIN_3 },
+ { true, ui::VKEY_5, true, false, true, SELECT_WIN_4 },
+ { true, ui::VKEY_6, true, false, true, SELECT_WIN_5 },
+ { true, ui::VKEY_7, true, false, true, SELECT_WIN_6 },
+ { true, ui::VKEY_8, true, false, true, SELECT_WIN_7 },
+ { true, ui::VKEY_9, true, false, true, SELECT_LAST_WIN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F3, true, true, true,
- ROTATE_WINDOWS },
+ { true, ui::VKEY_F3, true, true, true, ROTATE_WINDOWS },
#if !defined(NDEBUG)
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_HOME, false, true, false,
- ROTATE_SCREEN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_B, false, true, true,
- TOGGLE_DESKTOP_BACKGROUND_MODE },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F11, false, true, false,
- TOGGLE_ROOT_WINDOW_FULL_SCREEN },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_L, true, true, true,
- PRINT_LAYER_HIERARCHY },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_W, true, true, true,
- PRINT_WINDOW_HIERARCHY },
+ { true, ui::VKEY_HOME, false, true, false, ROTATE_SCREEN },
+ { true, ui::VKEY_B, false, true, true, TOGGLE_DESKTOP_BACKGROUND_MODE },
+ { true, ui::VKEY_F11, false, true, false, TOGGLE_ROOT_WINDOW_FULL_SCREEN },
+ { true, ui::VKEY_L, true, true, true, PRINT_LAYER_HIERARCHY },
+ { true, ui::VKEY_W, true, true, true, PRINT_WINDOW_HIERARCHY },
// For testing on systems where Alt-Tab is already mapped.
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_W, false, false, true,
- CYCLE_FORWARD_MRU },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_W, true, false, true,
- CYCLE_BACKWARD_MRU },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F4, false, true, false,
- ADD_REMOVE_MONITOR },
- { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F4, true, true, false,
- CYCLE_MONITOR },
+ { true, ui::VKEY_W, false, false, true, CYCLE_FORWARD_MRU },
+ { true, ui::VKEY_W, true, false, true, CYCLE_BACKWARD_MRU },
+ { true, ui::VKEY_F4, false, true, false, ADD_REMOVE_MONITOR },
+ { true, ui::VKEY_F4, true, true, false, CYCLE_MONITOR },
#endif
- // EventType, KeyboardCode, shift, control, alt, AcceleratorAction
+ // trigger_on_press, KeyboardCode, shift, control, alt, AcceleratorAction
};
const size_t kAcceleratorDataLength = arraysize(kAcceleratorData);
diff --git a/ash/accelerators/accelerator_table.h b/ash/accelerators/accelerator_table.h
index b59eac9..e9a2cda 100644
--- a/ash/accelerators/accelerator_table.h
+++ b/ash/accelerators/accelerator_table.h
@@ -62,7 +62,7 @@ enum AcceleratorAction {
};
struct AcceleratorData {
- ui::EventType type;
+ bool trigger_on_press;
ui::KeyboardCode keycode;
bool shift;
bool ctrl;
diff --git a/ash/accelerators/nested_dispatcher_controller_unittest.cc b/ash/accelerators/nested_dispatcher_controller_unittest.cc
index 18c24e0..5ad9d24 100644
--- a/ash/accelerators/nested_dispatcher_controller_unittest.cc
+++ b/ash/accelerators/nested_dispatcher_controller_unittest.cc
@@ -152,7 +152,6 @@ TEST_F(NestedDispatcherTest, AcceleratorsHandled) {
ui::Accelerator accelerator(ui::VKEY_A, false, false, false);
accelerator.set_type(ui::ET_KEY_RELEASED);
- // TODO(yusukes): Add a test for a ui::ET_TRANSLATED_KEY_RELEASE accelerator.
TestTarget target;
Shell::GetInstance()->accelerator_controller()->Register(accelerator,
&target);
diff --git a/ash/shell.cc b/ash/shell.cc
index 4fbc9ef..e985684 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -651,16 +651,15 @@ void Shell::Init() {
AddRootWindowEventFilter(partial_screenshot_filter_.get());
AddShellObserver(partial_screenshot_filter_.get());
- // Then AcceleratorFilter and InputMethodEventFilter must be added (in this
- // order) since they have the second highest priority.
+ // InputMethodEventFilter must be the third one. It has to be added before
+ // AcceleratorFilter.
DCHECK_EQ(2U, GetRootWindowEventFilterCount());
+ input_method_filter_.reset(new internal::InputMethodEventFilter);
+ AddRootWindowEventFilter(input_method_filter_.get());
#if !defined(OS_MACOSX)
accelerator_filter_.reset(new internal::AcceleratorFilter);
AddRootWindowEventFilter(accelerator_filter_.get());
- DCHECK_EQ(3U, GetRootWindowEventFilterCount());
#endif
- input_method_filter_.reset(new internal::InputMethodEventFilter);
- AddRootWindowEventFilter(input_method_filter_.get());
system_gesture_filter_.reset(new internal::SystemGestureEventFilter);
AddRootWindowEventFilter(system_gesture_filter_.get());
diff --git a/ui/base/accelerators/accelerator_manager.cc b/ui/base/accelerators/accelerator_manager.cc
index 034593d..4ab14b5 100644
--- a/ui/base/accelerators/accelerator_manager.cc
+++ b/ui/base/accelerators/accelerator_manager.cc
@@ -119,18 +119,13 @@ bool AcceleratorManager::HasPriorityHandler(
}
bool AcceleratorManager::ShouldHandle(const Accelerator& accelerator) const {
- if (accelerator.type() != ET_KEY_RELEASED &&
- accelerator.type() != ET_TRANSLATED_KEY_RELEASE) {
+ if (accelerator.type() != ET_KEY_RELEASED)
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;
+ return last_event_type_ == ET_KEY_PRESSED;
}
} // namespace ui