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

Side by Side Diff: chrome/browser/chromeos/status/input_method_menu.cc

Issue 4162002: Reduce CPU usage for input method switching. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 10 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/status/input_method_menu.h" 5 #include "chrome/browser/chromeos/status/input_method_menu.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "app/resource_bundle.h" 10 #include "app/resource_bundle.h"
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 371
372 void InputMethodMenu::RunMenu( 372 void InputMethodMenu::RunMenu(
373 views::View* unused_source, const gfx::Point& pt) { 373 views::View* unused_source, const gfx::Point& pt) {
374 PrepareForMenuOpen(); 374 PrepareForMenuOpen();
375 input_method_menu_.RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); 375 input_method_menu_.RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
376 } 376 }
377 377
378 //////////////////////////////////////////////////////////////////////////////// 378 ////////////////////////////////////////////////////////////////////////////////
379 // InputMethodLibrary::Observer implementation: 379 // InputMethodLibrary::Observer implementation:
380 380
381 void InputMethodMenu::InputMethodChanged(InputMethodLibrary* obj) { 381 void InputMethodMenu::InputMethodChanged(
382 InputMethodLibrary* obj,
383 const InputMethodDescriptor& previous_input_method,
384 const InputMethodDescriptor& current_input_method,
385 size_t num_active_input_methods) {
382 UserMetrics::RecordAction( 386 UserMetrics::RecordAction(
383 UserMetricsAction("LanguageMenuButton_InputMethodChanged")); 387 UserMetricsAction("LanguageMenuButton_InputMethodChanged"));
388 UpdateUIFromInputMethod(current_input_method, num_active_input_methods);
389 }
384 390
385 const InputMethodDescriptor& previous_input_method = 391 void InputMethodMenu::PreferenceUpdateNeeded(
386 obj->previous_input_method(); 392 InputMethodLibrary* obj,
387 const InputMethodDescriptor& current_input_method = 393 const InputMethodDescriptor& previous_input_method,
388 obj->current_input_method(); 394 const InputMethodDescriptor& current_input_method) {
389 UpdateUIFromInputMethod(current_input_method);
390 // Update Chrome prefs as well.
391 if (is_browser_mode_) { 395 if (is_browser_mode_) {
392 if (pref_service_) { // make sure we're not in unit tests. 396 if (pref_service_) { // make sure we're not in unit tests.
393 // Sometimes (e.g. initial boot) |previous_input_method.id| is empty. 397 // Sometimes (e.g. initial boot) |previous_input_method.id| is empty.
394 previous_input_method_pref_.SetValue(previous_input_method.id); 398 previous_input_method_pref_.SetValue(previous_input_method.id);
395 current_input_method_pref_.SetValue(current_input_method.id); 399 current_input_method_pref_.SetValue(current_input_method.id);
396 } 400 }
397 } else { 401 } else {
398 // We're in the login screen (i.e. not in the normal browser mode nor screen 402 // We're in the login screen (i.e. not in the normal browser mode nor screen
399 // locker mode). If a user has already logged in, we should not update the 403 // locker mode). If a user has already logged in, we should not update the
400 // local state since a profile for the user might be loaded before the 404 // local state since a profile for the user might be loaded before the
(...skipping 10 matching lines...) Expand all
411 UserMetrics::RecordAction(UserMetricsAction("LanguageMenuButton_Open")); 415 UserMetrics::RecordAction(UserMetricsAction("LanguageMenuButton_Open"));
412 input_method_descriptors_.reset(CrosLibrary::Get()->GetInputMethodLibrary()-> 416 input_method_descriptors_.reset(CrosLibrary::Get()->GetInputMethodLibrary()->
413 GetActiveInputMethods()); 417 GetActiveInputMethods());
414 RebuildModel(); 418 RebuildModel();
415 input_method_menu_.Rebuild(); 419 input_method_menu_.Rebuild();
416 if (minimum_input_method_menu_width_ > 0) { 420 if (minimum_input_method_menu_width_ > 0) {
417 input_method_menu_.SetMinimumWidth(minimum_input_method_menu_width_); 421 input_method_menu_.SetMinimumWidth(minimum_input_method_menu_width_);
418 } 422 }
419 } 423 }
420 424
421 void InputMethodMenu::ActiveInputMethodsChanged(InputMethodLibrary* obj) { 425 void InputMethodMenu::ActiveInputMethodsChanged(
426 InputMethodLibrary* obj,
427 const InputMethodDescriptor& current_input_method,
428 size_t num_active_input_methods) {
422 // Update the icon if active input methods are changed. See also 429 // Update the icon if active input methods are changed. See also
423 // comments in UpdateUI() 430 // comments in UpdateUI() in input_method_menu_button.cc.
424 UpdateUIFromInputMethod(obj->current_input_method()); 431 UpdateUIFromInputMethod(current_input_method, num_active_input_methods);
425 }
426
427 void InputMethodMenu::ImePropertiesChanged(InputMethodLibrary* obj) {
428 } 432 }
429 433
430 void InputMethodMenu::UpdateUIFromInputMethod( 434 void InputMethodMenu::UpdateUIFromInputMethod(
431 const InputMethodDescriptor& input_method) { 435 const InputMethodDescriptor& input_method,
436 size_t num_active_input_methods) {
432 const std::wstring name = GetTextForIndicator(input_method); 437 const std::wstring name = GetTextForIndicator(input_method);
433 const std::wstring tooltip = GetTextForMenu(input_method); 438 const std::wstring tooltip = GetTextForMenu(input_method);
434 UpdateUI(name, tooltip); 439 UpdateUI(input_method.id, name, tooltip, num_active_input_methods);
435 } 440 }
436 441
437 void InputMethodMenu::RebuildModel() { 442 void InputMethodMenu::RebuildModel() {
438 model_.reset(new menus::SimpleMenuModel(NULL)); 443 model_.reset(new menus::SimpleMenuModel(NULL));
439 string16 dummy_label = UTF8ToUTF16(""); 444 string16 dummy_label = UTF8ToUTF16("");
440 // Indicates if separator's needed before each section. 445 // Indicates if separator's needed before each section.
441 bool need_separator = false; 446 bool need_separator = false;
442 447
443 if (!input_method_descriptors_->empty()) { 448 if (!input_method_descriptors_->empty()) {
444 // We "abuse" the command_id and group_id arguments of AddRadioItem method. 449 // We "abuse" the command_id and group_id arguments of AddRadioItem method.
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 logged_in_ = true; 611 logged_in_ = true;
607 } 612 }
608 } 613 }
609 614
610 void InputMethodMenu::SetMinimumWidth(int width) { 615 void InputMethodMenu::SetMinimumWidth(int width) {
611 // On the OOBE network selection screen, fixed width menu would be preferable. 616 // On the OOBE network selection screen, fixed width menu would be preferable.
612 minimum_input_method_menu_width_ = width; 617 minimum_input_method_menu_width_ = width;
613 } 618 }
614 619
615 } // namespace chromeos 620 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/status/input_method_menu.h ('k') | chrome/browser/chromeos/status/input_method_menu_button.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698