Index: ash/accelerators/accelerator_controller.cc |
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc |
index 5b0f42c33003be7f43429f8d8dd80bb5821aa049..271165bff1b0b38f64e69070720725baee28aeb3 100644 |
--- a/ash/accelerators/accelerator_controller.cc |
+++ b/ash/accelerators/accelerator_controller.cc |
@@ -6,6 +6,7 @@ |
#include "ash/brightness_control_delegate.h" |
#include "ash/caps_lock_delegate.h" |
+#include "ash/ime_control_delegate.h" |
#include "ash/launcher/launcher.h" |
#include "ash/launcher/launcher_model.h" |
#include "ash/screenshot_delegate.h" |
@@ -32,6 +33,9 @@ enum AcceleratorAction { |
CYCLE_BACKWARD, |
CYCLE_FORWARD, |
EXIT, |
+ NEXT_IME, |
+ PREVIOUS_IME, |
+ SWITCH_IME, // Switch to another IME depending on the accelerator. |
TAKE_SCREENSHOT, |
TAKE_PARTIAL_SCREENSHOT, |
TOGGLE_CAPS_LOCK, |
@@ -51,45 +55,85 @@ enum AcceleratorAction { |
}; |
// Accelerators handled by AcceleratorController. |
-struct AcceleratorData { |
+const struct AcceleratorData { |
+ ui::EventType type; |
ui::KeyboardCode keycode; |
bool shift; |
bool ctrl; |
bool alt; |
AcceleratorAction action; |
} kAcceleratorData[] = { |
- { ui::VKEY_TAB, false, false, true, CYCLE_FORWARD }, |
- { ui::VKEY_TAB, true, false, true, CYCLE_BACKWARD }, |
- { ui::VKEY_F5, false, false, false, CYCLE_FORWARD }, |
+ // Accelerators that should be processed before a key is sent to an IME. |
+ // TODO(yusukes): Handle the NEXT_IME shortcut (Alt+Shift+Release) here. |
+ { ui::ET_KEY_PRESSED, 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 }, |
+ // 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 }, |
+ |
+ // 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 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_TAB, true, false, true, |
+ CYCLE_BACKWARD }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, false, false, false, |
+ CYCLE_FORWARD }, |
#if defined(OS_CHROMEOS) |
- { ui::VKEY_BRIGHTNESS_DOWN, false, false, false, BRIGHTNESS_DOWN }, |
- { ui::VKEY_BRIGHTNESS_UP, false, false, false, BRIGHTNESS_UP }, |
- { ui::VKEY_L, true, true, false, LOCK_SCREEN }, |
+ { 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 }, |
#endif |
- { ui::VKEY_Q, true, true, false, EXIT }, |
- { ui::VKEY_F5, true, false, false, CYCLE_BACKWARD }, |
- { ui::VKEY_F5, false, true, false, TAKE_SCREENSHOT }, |
- { ui::VKEY_F5, true, true, false, TAKE_PARTIAL_SCREENSHOT }, |
- { ui::VKEY_PRINT, false, false, false, TAKE_SCREENSHOT }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_Q, true, true, false, EXIT }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F5, true, false, false, |
+ CYCLE_BACKWARD }, |
+ { 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 }, |
// On Chrome OS, Search key is mapped to LWIN. |
- { ui::VKEY_LWIN, true, false, false, TOGGLE_CAPS_LOCK }, |
- { ui::VKEY_F6, false, false, false, BRIGHTNESS_DOWN }, |
- { ui::VKEY_F7, false, false, false, BRIGHTNESS_UP }, |
- { ui::VKEY_F8, false, false, false, VOLUME_MUTE }, |
- { ui::VKEY_VOLUME_MUTE, false, false, false, VOLUME_MUTE }, |
- { ui::VKEY_F9, false, false, false, VOLUME_DOWN }, |
- { ui::VKEY_VOLUME_DOWN, false, false, false, VOLUME_DOWN }, |
- { ui::VKEY_F10, false, false, false, VOLUME_UP }, |
- { ui::VKEY_VOLUME_UP, false, false, false, VOLUME_UP }, |
+ { 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 }, |
#if !defined(NDEBUG) |
- { ui::VKEY_HOME, false, true, false, ROTATE_SCREEN }, |
- { ui::VKEY_A, false, true, true, TOGGLE_COMPACT_WINDOW_MODE }, |
- { ui::VKEY_F11, false, true, false, TOGGLE_ROOT_WINDOW_FULL_SCREEN }, |
- { ui::VKEY_L, false, false, true, PRINT_LAYER_HIERARCHY }, |
- { ui::VKEY_L, true, false, true, PRINT_WINDOW_HIERARCHY }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_HOME, false, true, false, |
+ ROTATE_SCREEN }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_A, false, true, true, |
+ TOGGLE_COMPACT_WINDOW_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, false, false, true, |
+ PRINT_LAYER_HIERARCHY }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_L, true, false, true, |
+ PRINT_WINDOW_HIERARCHY }, |
// For testing on systems where Alt-Tab is already mapped. |
- { ui::VKEY_W, false, false, true, CYCLE_FORWARD }, |
- { ui::VKEY_W, true, false, true, CYCLE_BACKWARD }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_W, false, false, true, |
+ CYCLE_FORWARD }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_W, true, false, true, |
+ CYCLE_BACKWARD }, |
#endif |
}; |
@@ -210,26 +254,24 @@ void AcceleratorController::Init() { |
kAcceleratorData[i].shift, |
kAcceleratorData[i].ctrl, |
kAcceleratorData[i].alt); |
+ accelerator.set_type(kAcceleratorData[i].type); |
Register(accelerator, this); |
- accelerators_.insert(std::make_pair(accelerator, |
- kAcceleratorData[i].action)); |
+ CHECK(accelerators_.insert( |
+ std::make_pair(accelerator, kAcceleratorData[i].action)).second); |
} |
} |
-void AcceleratorController::Register( |
- const ui::Accelerator& accelerator, |
- ui::AcceleratorTarget* target) { |
+void AcceleratorController::Register(const ui::Accelerator& accelerator, |
+ ui::AcceleratorTarget* target) { |
accelerator_manager_->Register(accelerator, target); |
} |
-void AcceleratorController::Unregister( |
- const ui::Accelerator& accelerator, |
- ui::AcceleratorTarget* target) { |
+void AcceleratorController::Unregister(const ui::Accelerator& accelerator, |
+ ui::AcceleratorTarget* target) { |
accelerator_manager_->Unregister(accelerator, target); |
} |
-void AcceleratorController::UnregisterAll( |
- ui::AcceleratorTarget* target) { |
+void AcceleratorController::UnregisterAll(ui::AcceleratorTarget* target) { |
accelerator_manager_->UnregisterAll(target); |
} |
@@ -247,6 +289,11 @@ void AcceleratorController::SetCapsLockDelegate( |
caps_lock_delegate_.swap(caps_lock_delegate); |
} |
+void AcceleratorController::SetImeControlDelegate( |
+ scoped_ptr<ImeControlDelegate> ime_control_delegate) { |
+ ime_control_delegate_.swap(ime_control_delegate); |
+} |
+ |
void AcceleratorController::SetScreenshotDelegate( |
scoped_ptr<ScreenshotDelegate> screenshot_delegate) { |
screenshot_delegate_.swap(screenshot_delegate); |
@@ -316,6 +363,18 @@ bool AcceleratorController::AcceleratorPressed( |
if (volume_control_delegate_.get()) |
return volume_control_delegate_->HandleVolumeUp(accelerator); |
break; |
+ case NEXT_IME: |
+ if (ime_control_delegate_.get()) |
+ return ime_control_delegate_->HandleNextIme(); |
+ break; |
+ case PREVIOUS_IME: |
+ if (ime_control_delegate_.get()) |
+ return ime_control_delegate_->HandlePreviousIme(); |
+ break; |
+ case SWITCH_IME: |
+ if (ime_control_delegate_.get()) |
+ return ime_control_delegate_->HandleSwitchIme(accelerator); |
+ break; |
#if !defined(NDEBUG) |
case ROTATE_SCREEN: |
return HandleRotateScreen(); |