Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: chrome/browser/chromeos/input_method/input_method_manager.cc

Issue 8840002: (Chrome OS) Notify when the candidate window is opened/closed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove unused header Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/chromeos/input_method/input_method_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 } 122 }
123 return false; 123 return false;
124 } 124 }
125 125
126 } // namespace 126 } // namespace
127 127
128 namespace chromeos { 128 namespace chromeos {
129 namespace input_method { 129 namespace input_method {
130 130
131 // The implementation of InputMethodManager. 131 // The implementation of InputMethodManager.
132 class InputMethodManagerImpl : public HotkeyManager::Observer, 132 class InputMethodManagerImpl
133 public InputMethodManager, 133 : public HotkeyManager::Observer,
134 public content::NotificationObserver, 134 public InputMethodManager,
135 public IBusController::Observer { 135 public content::NotificationObserver,
136 #if !defined(USE_VIRTUAL_KEYBOARD)
137 public CandidateWindowController::Observer,
138 #endif
139 public IBusController::Observer {
136 public: 140 public:
137 InputMethodManagerImpl() 141 InputMethodManagerImpl()
138 : ibus_controller_(IBusController::Create()), 142 : ibus_controller_(IBusController::Create()),
139 should_launch_ime_(false), 143 should_launch_ime_(false),
140 ime_connected_(false), 144 ime_connected_(false),
141 defer_ime_startup_(false), 145 defer_ime_startup_(false),
142 enable_auto_ime_shutdown_(true), 146 enable_auto_ime_shutdown_(true),
143 shutting_down_(false), 147 shutting_down_(false),
144 ibus_daemon_process_handle_(base::kNullProcessHandle), 148 ibus_daemon_process_handle_(base::kNullProcessHandle),
145 util_(ibus_controller_->GetSupportedInputMethods()), 149 util_(ibus_controller_->GetSupportedInputMethods()),
(...skipping 25 matching lines...) Expand all
171 } 175 }
172 } 176 }
173 177
174 AddHotkeys(); 178 AddHotkeys();
175 hotkey_manager_.AddObserver(this); 179 hotkey_manager_.AddObserver(this);
176 } 180 }
177 181
178 virtual ~InputMethodManagerImpl() { 182 virtual ~InputMethodManagerImpl() {
179 hotkey_manager_.RemoveObserver(this); 183 hotkey_manager_.RemoveObserver(this);
180 ibus_controller_->RemoveObserver(this); 184 ibus_controller_->RemoveObserver(this);
185 #if !defined(USE_VIRTUAL_KEYBOARD)
186 if (candidate_window_controller_.get())
187 candidate_window_controller_->RemoveObserver(this);
188 #endif
181 } 189 }
182 190
183 virtual void AddObserver(InputMethodManager::Observer* observer) { 191 virtual void AddObserver(InputMethodManager::Observer* observer) {
184 observers_.AddObserver(observer); 192 observers_.AddObserver(observer);
185 } 193 }
186 194
187 virtual void RemoveObserver(InputMethodManager::Observer* observer) { 195 virtual void RemoveObserver(InputMethodManager::Observer* observer) {
188 observers_.RemoveObserver(observer); 196 observers_.RemoveObserver(observer);
189 } 197 }
190 198
199 virtual void AddCandidateWindowObserver(
200 InputMethodManager::CandidateWindowObserver* observer) {
201 candidate_window_observers_.AddObserver(observer);
202 }
203
204 virtual void RemoveCandidateWindowObserver(
205 InputMethodManager::CandidateWindowObserver* observer) {
206 candidate_window_observers_.RemoveObserver(observer);
207 }
208
191 virtual void AddPreLoginPreferenceObserver( 209 virtual void AddPreLoginPreferenceObserver(
192 InputMethodManager::PreferenceObserver* observer) { 210 InputMethodManager::PreferenceObserver* observer) {
193 if (!pre_login_preference_observers_.size()) { 211 if (!pre_login_preference_observers_.size()) {
194 observer->FirstObserverIsAdded(this); 212 observer->FirstObserverIsAdded(this);
195 } 213 }
196 pre_login_preference_observers_.AddObserver(observer); 214 pre_login_preference_observers_.AddObserver(observer);
197 } 215 }
198 216
199 virtual void RemovePreLoginPreferenceObserver( 217 virtual void RemovePreLoginPreferenceObserver(
200 InputMethodManager::PreferenceObserver* observer) { 218 InputMethodManager::PreferenceObserver* observer) {
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 break; 540 break;
523 case kJapaneseInputMethod: 541 case kJapaneseInputMethod:
524 case kJapaneseLayout: 542 case kJapaneseLayout:
525 case kJapaneseInputMethodOrLayout: 543 case kJapaneseInputMethodOrLayout:
526 case kKoreanInputMethodOrLayout: 544 case kKoreanInputMethodOrLayout:
527 SwitchToInputMethod(event); 545 SwitchToInputMethod(event);
528 break; 546 break;
529 } 547 }
530 } 548 }
531 549
550 virtual void CandidateWindowOpened() {
551 FOR_EACH_OBSERVER(InputMethodManager::CandidateWindowObserver,
552 candidate_window_observers_,
553 CandidateWindowOpened(this));
554 }
555
556 virtual void CandidateWindowClosed() {
557 FOR_EACH_OBSERVER(InputMethodManager::CandidateWindowObserver,
558 candidate_window_observers_,
559 CandidateWindowClosed(this));
560 }
561
532 virtual void SwitchToNextInputMethod() { 562 virtual void SwitchToNextInputMethod() {
533 // Sanity checks. 563 // Sanity checks.
534 if (active_input_method_ids_.empty()) { 564 if (active_input_method_ids_.empty()) {
535 LOG(ERROR) << "active input method is empty"; 565 LOG(ERROR) << "active input method is empty";
536 return; 566 return;
537 } 567 }
538 if (current_input_method_.id().empty()) { 568 if (current_input_method_.id().empty()) {
539 LOG(ERROR) << "current_input_method_ is unknown"; 569 LOG(ERROR) << "current_input_method_ is unknown";
540 return; 570 return;
541 } 571 }
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 } 1128 }
1099 1129
1100 if (shutting_down_) { 1130 if (shutting_down_) {
1101 NOTREACHED() << "Trying to launch input method while shutting down"; 1131 NOTREACHED() << "Trying to launch input method while shutting down";
1102 return false; 1132 return false;
1103 } 1133 }
1104 1134
1105 #if !defined(USE_VIRTUAL_KEYBOARD) 1135 #if !defined(USE_VIRTUAL_KEYBOARD)
1106 if (!candidate_window_controller_.get()) { 1136 if (!candidate_window_controller_.get()) {
1107 candidate_window_controller_.reset(new CandidateWindowController); 1137 candidate_window_controller_.reset(new CandidateWindowController);
1108 if (!candidate_window_controller_->Init()) { 1138 if (candidate_window_controller_->Init()) {
1139 candidate_window_controller_->AddObserver(this);
1140 } else {
1109 LOG(WARNING) << "Failed to initialize the candidate window controller"; 1141 LOG(WARNING) << "Failed to initialize the candidate window controller";
1110 } 1142 }
1111 } 1143 }
1112 #endif 1144 #endif
1113 1145
1114 if (ibus_daemon_process_handle_ != base::kNullProcessHandle) { 1146 if (ibus_daemon_process_handle_ != base::kNullProcessHandle) {
1115 return false; // ibus-daemon is already running. 1147 return false; // ibus-daemon is already running.
1116 } 1148 }
1117 1149
1118 // TODO(zork): Send output to /var/log/ibus.log 1150 // TODO(zork): Send output to /var/log/ibus.log
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 // content::NotificationObserver implementation: 1206 // content::NotificationObserver implementation:
1175 void Observe(int type, 1207 void Observe(int type,
1176 const content::NotificationSource& source, 1208 const content::NotificationSource& source,
1177 const content::NotificationDetails& details) { 1209 const content::NotificationDetails& details) {
1178 // Stop the input method daemon on browser shutdown. 1210 // Stop the input method daemon on browser shutdown.
1179 if (type == content::NOTIFICATION_APP_TERMINATING) { 1211 if (type == content::NOTIFICATION_APP_TERMINATING) {
1180 shutting_down_ = true; 1212 shutting_down_ = true;
1181 notification_registrar_.RemoveAll(); 1213 notification_registrar_.RemoveAll();
1182 StopInputMethodDaemon(); 1214 StopInputMethodDaemon();
1183 #if !defined(USE_VIRTUAL_KEYBOARD) 1215 #if !defined(USE_VIRTUAL_KEYBOARD)
1216 if (candidate_window_controller_.get())
1217 candidate_window_controller_->RemoveObserver(this);
1184 candidate_window_controller_.reset(NULL); 1218 candidate_window_controller_.reset(NULL);
1185 #endif 1219 #endif
1186 } 1220 }
1187 } 1221 }
1188 1222
1189 void UpdateInputMethodSpecificHotkeys() { 1223 void UpdateInputMethodSpecificHotkeys() {
1190 // Remove all input method specific hotkeys first. 1224 // Remove all input method specific hotkeys first.
1191 for (size_t i = 0; i < kInputMethodSpecificHotkeySettingsLen; ++i) { 1225 for (size_t i = 0; i < kInputMethodSpecificHotkeySettingsLen; ++i) {
1192 hotkey_manager_.RemoveHotkey( 1226 hotkey_manager_.RemoveHotkey(
1193 kInputMethodSpecificHotkeySettings[i].event_id); 1227 kInputMethodSpecificHotkeySettings[i].event_id);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 if (iter == ids.end()) { 1328 if (iter == ids.end()) {
1295 iter = ids.begin(); 1329 iter = ids.begin();
1296 } 1330 }
1297 ChangeInputMethod(*iter); 1331 ChangeInputMethod(*iter);
1298 } 1332 }
1299 1333
1300 // The IBus controller is used to control the input method status and 1334 // The IBus controller is used to control the input method status and
1301 // allow allow callbacks when the input method status changes. 1335 // allow allow callbacks when the input method status changes.
1302 scoped_ptr<IBusController> ibus_controller_; 1336 scoped_ptr<IBusController> ibus_controller_;
1303 ObserverList<InputMethodManager::Observer> observers_; 1337 ObserverList<InputMethodManager::Observer> observers_;
1338 ObserverList<InputMethodManager::CandidateWindowObserver>
1339 candidate_window_observers_;
1304 ObserverList<PreferenceObserver> pre_login_preference_observers_; 1340 ObserverList<PreferenceObserver> pre_login_preference_observers_;
1305 ObserverList<PreferenceObserver> post_login_preference_observers_; 1341 ObserverList<PreferenceObserver> post_login_preference_observers_;
1306 ObserverList<VirtualKeyboardObserver> virtual_keyboard_observers_; 1342 ObserverList<VirtualKeyboardObserver> virtual_keyboard_observers_;
1307 1343
1308 // The input method which was/is selected. 1344 // The input method which was/is selected.
1309 InputMethodDescriptor previous_input_method_; 1345 InputMethodDescriptor previous_input_method_;
1310 InputMethodDescriptor current_input_method_; 1346 InputMethodDescriptor current_input_method_;
1311 1347
1312 // The input method properties which the current input method uses. The list 1348 // The input method properties which the current input method uses. The list
1313 // might be empty when no input method is used. 1349 // might be empty when no input method is used.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 return InputMethodManagerImpl::GetInstance(); 1428 return InputMethodManagerImpl::GetInstance();
1393 } 1429 }
1394 1430
1395 } // namespace input_method 1431 } // namespace input_method
1396 } // namespace chromeos 1432 } // namespace chromeos
1397 1433
1398 // Allows InvokeLater without adding refcounting. This class is a Singleton and 1434 // Allows InvokeLater without adding refcounting. This class is a Singleton and
1399 // won't be deleted until it's last InvokeLater is run. 1435 // won't be deleted until it's last InvokeLater is run.
1400 DISABLE_RUNNABLE_METHOD_REFCOUNT( 1436 DISABLE_RUNNABLE_METHOD_REFCOUNT(
1401 chromeos::input_method::InputMethodManagerImpl); 1437 chromeos::input_method::InputMethodManagerImpl);
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/input_method/input_method_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698