Index: chrome/browser/ui/views/ash/ime_controller_chromeos.cc |
diff --git a/chrome/browser/ui/views/ash/ime_controller_chromeos.cc b/chrome/browser/ui/views/ash/ime_controller_chromeos.cc |
index 1934357e90140bc62cc7e8ea681e6ab6cc68b498..98ac9a2cca7b1a4b8b4e3b435dead3f9cb9df439 100644 |
--- a/chrome/browser/ui/views/ash/ime_controller_chromeos.cc |
+++ b/chrome/browser/ui/views/ash/ime_controller_chromeos.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/ui/views/ash/ime_controller_chromeos.h" |
#include "chrome/browser/chromeos/input_method/input_method_manager.h" |
+#include "ui/base/accelerators/accelerator.h" |
bool ImeController::HandleNextIme() { |
chromeos::input_method::InputMethodManager* manager = |
@@ -23,3 +24,31 @@ bool ImeController::HandleSwitchIme(const ui::Accelerator& accelerator) { |
chromeos::input_method::InputMethodManager::GetInstance(); |
return manager->SwitchInputMethod(accelerator); |
} |
+ |
+ui::Accelerator ImeController::RemapAccelerator( |
+ const ui::Accelerator& accelerator) { |
+ ui::KeyboardCode key = accelerator.key_code(); |
+ int modifiers = accelerator.modifiers(); |
+ // On French keyboards the user needs to press a number key in conjunction |
+ // with the shift key. To get the right accelerator from our static table |
+ // we modify the received accelerator to match this. |
+ if (key >= ui::VKEY_0 && key <= ui::VKEY_9) { |
+ // A keyboard layout can get changed by the user, so we perform quickly |
+ // this cheap layout test. |
+ // See http://crbug.com/129017 for more details. |
+ if (UsingFrenchInputMethod()) { |
+ // We toggle the shift key to get the correct accelerator from our table. |
+ modifiers ^= ui::EF_SHIFT_DOWN; |
+ } |
+ } |
+ return ui::Accelerator(key, modifiers); |
+} |
+ |
+bool ImeController::UsingFrenchInputMethod() const { |
+ chromeos::input_method::InputMethodManager* manager = |
+ chromeos::input_method::InputMethodManager::GetInstance(); |
+ const chromeos::input_method::InputMethodDescriptor& descriptor = |
+ manager->GetCurrentInputMethod(); |
+ const std::string& layout = descriptor.id(); |
+ return (layout == "xkb:fr::fra" || layout == "xkb:be::fra"); |
+} |