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.
5 #include "chrome/browser/ui/ash/ime_controller_chromeos.h"
7 #include "chromeos/ime/input_method_manager.h"
8 #include "ui/base/accelerators/accelerator.h"
10 bool ImeController::HandleNextIme() {
11 chromeos::input_method::InputMethodManager
* manager
=
12 chromeos::input_method::InputMethodManager::Get();
13 return manager
->SwitchToNextInputMethod();
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
);
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
);
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
;
44 ui::Accelerator
remapped_accelerator(key
, modifiers
);
45 remapped_accelerator
.set_type(accelerator
.type());
46 return remapped_accelerator
;
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");