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 HandleNextIme()10void ImeController::HandleNextIme() { 11 chromeos::input_method::InputMethodManager* manager = 12 chromeos::input_method::InputMethodManager::Get(); 13 manager->GetActiveIMEState()->SwitchToNextInputMethod(); 14 } 15 HandlePreviousIme(const ui::Accelerator & accelerator)16bool ImeController::HandlePreviousIme(const ui::Accelerator& accelerator) { 17 chromeos::input_method::InputMethodManager* manager = 18 chromeos::input_method::InputMethodManager::Get(); 19 return manager->GetActiveIMEState()->SwitchToPreviousInputMethod(accelerator); 20 } 21 HandleSwitchIme(const ui::Accelerator & accelerator)22bool ImeController::HandleSwitchIme(const ui::Accelerator& accelerator) { 23 chromeos::input_method::InputMethodManager* manager = 24 chromeos::input_method::InputMethodManager::Get(); 25 return manager->GetActiveIMEState()->SwitchInputMethod(accelerator); 26 } 27 RemapAccelerator(const ui::Accelerator & accelerator)28ui::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 UsingFrenchInputMethod() const49bool ImeController::UsingFrenchInputMethod() const { 50 chromeos::input_method::InputMethodManager* manager = 51 chromeos::input_method::InputMethodManager::Get(); 52 const chromeos::input_method::InputMethodDescriptor& descriptor = 53 manager->GetActiveIMEState()->GetCurrentInputMethod(); 54 const std::string& layout = descriptor.id(); 55 return (layout == "xkb:fr::fra" || layout == "xkb:be::fra"); 56 } 57