Home | History | Annotate | Download | only in ash
      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