// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/ui/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 = chromeos::input_method::InputMethodManager::GetInstance(); return manager->SwitchToNextInputMethod(); } bool ImeController::HandlePreviousIme() { chromeos::input_method::InputMethodManager* manager = chromeos::input_method::InputMethodManager::GetInstance(); return manager->SwitchToPreviousInputMethod(); } bool ImeController::HandleSwitchIme(const ui::Accelerator& accelerator) { chromeos::input_method::InputMethodManager* manager = 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; } } ui::Accelerator remapped_accelerator(key, modifiers); remapped_accelerator.set_type(accelerator.type()); return remapped_accelerator; } 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"); }