OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/input_method/input_method_manager.h" | 5 #include "chrome/browser/chromeos/input_method/input_method_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include <glib.h> | 9 #include <glib.h> |
10 | 10 |
11 #include "unicode/uloc.h" | 11 #include "unicode/uloc.h" |
12 | 12 |
13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
| 14 #include "base/memory/scoped_ptr.h" |
14 #include "base/memory/singleton.h" | 15 #include "base/memory/singleton.h" |
15 #include "base/message_loop.h" | 16 #include "base/message_loop.h" |
16 #include "base/process_util.h" | 17 #include "base/process_util.h" |
17 #include "base/string_split.h" | 18 #include "base/string_split.h" |
18 #include "base/string_util.h" | 19 #include "base/string_util.h" |
19 #include "base/stringprintf.h" | 20 #include "base/stringprintf.h" |
20 #include "chrome/browser/browser_process.h" | 21 #include "chrome/browser/browser_process.h" |
21 #include "chrome/browser/chromeos/input_method/hotkey_manager.h" | 22 #include "chrome/browser/chromeos/input_method/hotkey_manager.h" |
22 #include "chrome/browser/chromeos/input_method/input_method_util.h" | 23 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
23 #include "chrome/browser/chromeos/input_method/virtual_keyboard_selector.h" | 24 #include "chrome/browser/chromeos/input_method/virtual_keyboard_selector.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 public: | 141 public: |
141 InputMethodManagerImpl() | 142 InputMethodManagerImpl() |
142 : ibus_controller_(IBusController::Create()), | 143 : ibus_controller_(IBusController::Create()), |
143 should_launch_ime_(false), | 144 should_launch_ime_(false), |
144 ime_connected_(false), | 145 ime_connected_(false), |
145 defer_ime_startup_(false), | 146 defer_ime_startup_(false), |
146 enable_auto_ime_shutdown_(true), | 147 enable_auto_ime_shutdown_(true), |
147 shutting_down_(false), | 148 shutting_down_(false), |
148 ibus_daemon_process_handle_(base::kNullProcessHandle), | 149 ibus_daemon_process_handle_(base::kNullProcessHandle), |
149 util_(ibus_controller_->GetSupportedInputMethods()), | 150 util_(ibus_controller_->GetSupportedInputMethods()), |
150 xkeyboard_(util_) { | 151 xkeyboard_(XKeyboard::Create(util_)) { |
151 // Observe APP_TERMINATING to stop input method daemon gracefully. | 152 // Observe APP_TERMINATING to stop input method daemon gracefully. |
152 // We should not use APP_EXITING here since logout might be canceled by | 153 // We should not use APP_EXITING here since logout might be canceled by |
153 // JavaScript after APP_EXITING is sent (crosbug.com/11055). | 154 // JavaScript after APP_EXITING is sent (crosbug.com/11055). |
154 // Note that even if we fail to stop input method daemon from | 155 // Note that even if we fail to stop input method daemon from |
155 // Chrome in case of a sudden crash, we have a way to do it from an | 156 // Chrome in case of a sudden crash, we have a way to do it from an |
156 // upstart script. See crosbug.com/6515 and crosbug.com/6995 for | 157 // upstart script. See crosbug.com/6515 and crosbug.com/6995 for |
157 // details. | 158 // details. |
158 notification_registrar_.Add(this, content::NOTIFICATION_APP_TERMINATING, | 159 notification_registrar_.Add(this, content::NOTIFICATION_APP_TERMINATING, |
159 content::NotificationService::AllSources()); | 160 content::NotificationService::AllSources()); |
160 | 161 |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 virtual void ClearAllVirtualKeyboardPreferences() { | 516 virtual void ClearAllVirtualKeyboardPreferences() { |
516 virtual_keyboard_selector_.ClearAllUserPreferences(); | 517 virtual_keyboard_selector_.ClearAllUserPreferences(); |
517 UpdateVirtualKeyboardUI(); | 518 UpdateVirtualKeyboardUI(); |
518 } | 519 } |
519 | 520 |
520 virtual InputMethodUtil* GetInputMethodUtil() { | 521 virtual InputMethodUtil* GetInputMethodUtil() { |
521 return &util_; | 522 return &util_; |
522 } | 523 } |
523 | 524 |
524 virtual XKeyboard* GetXKeyboard() { | 525 virtual XKeyboard* GetXKeyboard() { |
525 return &xkeyboard_; | 526 return xkeyboard_.get(); |
526 } | 527 } |
527 | 528 |
528 virtual HotkeyManager* GetHotkeyManager() { | 529 virtual HotkeyManager* GetHotkeyManager() { |
529 return &hotkey_manager_; | 530 return &hotkey_manager_; |
530 } | 531 } |
531 | 532 |
532 virtual void HotkeyPressed(HotkeyManager* manager, int event_id) { | 533 virtual void HotkeyPressed(HotkeyManager* manager, int event_id) { |
533 const HotkeyEvent event = HotkeyEvent(event_id); | 534 const HotkeyEvent event = HotkeyEvent(event_id); |
534 switch (event) { | 535 switch (event) { |
535 case kPreviousInputMethod: | 536 case kPreviousInputMethod: |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 // descriptor. This function updates states like current_input_method_ | 944 // descriptor. This function updates states like current_input_method_ |
944 // and notifies observers about the change (that will update the | 945 // and notifies observers about the change (that will update the |
945 // preferences), hence this function should always be used even if you | 946 // preferences), hence this function should always be used even if you |
946 // just need to change the current keyboard layout. | 947 // just need to change the current keyboard layout. |
947 void ChangeCurrentInputMethod(const InputMethodDescriptor& new_input_method) { | 948 void ChangeCurrentInputMethod(const InputMethodDescriptor& new_input_method) { |
948 if (current_input_method_.id() != new_input_method.id()) { | 949 if (current_input_method_.id() != new_input_method.id()) { |
949 previous_input_method_ = current_input_method_; | 950 previous_input_method_ = current_input_method_; |
950 current_input_method_ = new_input_method; | 951 current_input_method_ = new_input_method; |
951 | 952 |
952 // Change the keyboard layout to a preferred layout for the input method. | 953 // Change the keyboard layout to a preferred layout for the input method. |
953 if (!xkeyboard_.SetCurrentKeyboardLayoutByName( | 954 if (!xkeyboard_->SetCurrentKeyboardLayoutByName( |
954 current_input_method_.keyboard_layout())) { | 955 current_input_method_.keyboard_layout())) { |
955 LOG(ERROR) << "Failed to change keyboard layout to " | 956 LOG(ERROR) << "Failed to change keyboard layout to " |
956 << current_input_method_.keyboard_layout(); | 957 << current_input_method_.keyboard_layout(); |
957 } | 958 } |
958 | 959 |
959 // Save the input method names to the Pref. | 960 // Save the input method names to the Pref. |
960 if (!UpdateInputMethodPreference(&post_login_preference_observers_)) { | 961 if (!UpdateInputMethodPreference(&post_login_preference_observers_)) { |
961 // When both pre- and post-login observers are available, only notifies | 962 // When both pre- and post-login observers are available, only notifies |
962 // the latter one. | 963 // the latter one. |
963 UpdateInputMethodPreference(&pre_login_preference_observers_); | 964 UpdateInputMethodPreference(&pre_login_preference_observers_); |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1408 // information. e.g. "mozc-jp" to XK_ZenkakuHankaku, "mozc-jp" to XK_Henkan. | 1409 // information. e.g. "mozc-jp" to XK_ZenkakuHankaku, "mozc-jp" to XK_Henkan. |
1409 std::multimap<std::string, | 1410 std::multimap<std::string, |
1410 const InputMethodSpecificHotkeySetting*> extra_hotkeys_; | 1411 const InputMethodSpecificHotkeySetting*> extra_hotkeys_; |
1411 | 1412 |
1412 // An object which provides miscellaneous input method utility functions. Note | 1413 // An object which provides miscellaneous input method utility functions. Note |
1413 // that |util_| is required to initialize |xkeyboard_|. | 1414 // that |util_| is required to initialize |xkeyboard_|. |
1414 InputMethodUtil util_; | 1415 InputMethodUtil util_; |
1415 | 1416 |
1416 // An object for switching XKB layouts and keyboard status like caps lock and | 1417 // An object for switching XKB layouts and keyboard status like caps lock and |
1417 // auto-repeat interval. | 1418 // auto-repeat interval. |
1418 XKeyboard xkeyboard_; | 1419 scoped_ptr<XKeyboard> xkeyboard_; |
1419 | 1420 |
1420 // An object which detects Control+space and Shift+Alt key presses. | 1421 // An object which detects Control+space and Shift+Alt key presses. |
1421 HotkeyManager hotkey_manager_; | 1422 HotkeyManager hotkey_manager_; |
1422 | 1423 |
1423 DISALLOW_COPY_AND_ASSIGN(InputMethodManagerImpl); | 1424 DISALLOW_COPY_AND_ASSIGN(InputMethodManagerImpl); |
1424 }; | 1425 }; |
1425 | 1426 |
1426 // static | 1427 // static |
1427 InputMethodManager* InputMethodManager::GetInstance() { | 1428 InputMethodManager* InputMethodManager::GetInstance() { |
1428 return InputMethodManagerImpl::GetInstance(); | 1429 return InputMethodManagerImpl::GetInstance(); |
1429 } | 1430 } |
1430 | 1431 |
1431 } // namespace input_method | 1432 } // namespace input_method |
1432 } // namespace chromeos | 1433 } // namespace chromeos |
OLD | NEW |