diff options
author | yusukes@google.com <yusukes@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-24 07:22:05 +0000 |
---|---|---|
committer | yusukes@google.com <yusukes@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-24 07:22:05 +0000 |
commit | 375755b38db43f1e23742a3cad31efddf2111f18 (patch) | |
tree | 5032d960faf5b4406676589728fcf382351eb177 | |
parent | f3c06962021d87a78e9dc6662d99af06494ebd7c (diff) | |
download | chromium_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.cc | 3 | ||||
-rw-r--r-- | ash/accelerators/accelerator_controller_unittest.cc | 165 | ||||
-rw-r--r-- | ash/accelerators/accelerator_dispatcher.cc | 3 | ||||
-rw-r--r-- | ash/accelerators/accelerator_filter.cc | 4 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.cc | 187 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.h | 2 | ||||
-rw-r--r-- | ash/accelerators/nested_dispatcher_controller_unittest.cc | 1 | ||||
-rw-r--r-- | ash/shell.cc | 9 | ||||
-rw-r--r-- | ui/base/accelerators/accelerator_manager.cc | 11 |
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 |