1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/ash/ime_controller_chromeos.h" 6 7 #include "chromeos/ime/input_method_manager.h" 8 #include "ui/base/accelerators/accelerator.h" 9 10 bool ImeController::HandleNextIme() { 11 chromeos::input_method::InputMethodManager* manager = 12 chromeos::input_method::InputMethodManager::Get(); 13 return manager->SwitchToNextInputMethod(); 14 } 15 16 bool ImeController::HandlePreviousIme(const ui::Accelerator& accelerator) { 17 chromeos::input_method::InputMethodManager* manager = 18 chromeos::input_method::InputMethodManager::Get(); 19 return manager->SwitchToPreviousInputMethod(accelerator); 20 } 21 22 bool ImeController::HandleSwitchIme(const ui::Accelerator& accelerator) { 23 chromeos::input_method::InputMethodManager* manager = 24 chromeos::input_method::InputMethodManager::Get(); 25 return manager->SwitchInputMethod(accelerator); 26 } 27 28 ui::Accelerator ImeController::RemapAccelerator( 29 const ui::Accelerator& accelerator) { 30 ui::KeyboardCode key = accelerator.key_code(); 31 int modifiers = accelerator.modifiers(); 32 // On French keyboards the user needs to press a number key in conjunction 33 // with the shift key. To get the right accelerator from our static table 34 // we modify the received accelerator to match this. 35 if (key >= ui::VKEY_0 && key <= ui::VKEY_9) { 36 // A keyboard layout can get changed by the user, so we perform quickly 37 // this cheap layout test. 38 // See http://crbug.com/129017 for more details. 39 if (UsingFrenchInputMethod()) { 40 // We toggle the shift key to get the correct accelerator from our table. 41 modifiers ^= ui::EF_SHIFT_DOWN; 42 } 43 } 44 ui::Accelerator remapped_accelerator(key, modifiers); 45 remapped_accelerator.set_type(accelerator.type()); 46 return remapped_accelerator; 47 } 48 49 bool ImeController::UsingFrenchInputMethod() const { 50 chromeos::input_method::InputMethodManager* manager = 51 chromeos::input_method::InputMethodManager::Get(); 52 const chromeos::input_method::InputMethodDescriptor& descriptor = 53 manager->GetCurrentInputMethod(); 54 const std::string& layout = descriptor.id(); 55 return (layout == "xkb:fr::fra" || layout == "xkb:be::fra"); 56 } 57