diff options
author | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-25 04:30:22 +0000 |
---|---|---|
committer | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-25 04:30:22 +0000 |
commit | fbab785283ef780c37b2d0b8fd5f1afde96d0dcd (patch) | |
tree | 010f15d4cd1336a9e34416d184511aa94aa8398d /chrome/browser/chromeos/language_library.cc | |
parent | 3fa06ed3962a599ff43c992e63113529e177fd6a (diff) | |
download | chromium_src-fbab785283ef780c37b2d0b8fd5f1afde96d0dcd.zip chromium_src-fbab785283ef780c37b2d0b8fd5f1afde96d0dcd.tar.gz chromium_src-fbab785283ef780c37b2d0b8fd5f1afde96d0dcd.tar.bz2 |
Retry starting monitoring language changes.
Before the change, monitoring was started when LanguageLibrary object
was first created. This assumes that ibus-daemon is already running
by the time LanguageLibrary is created, which is not necessarily true
on Chromium OS. This change adds some retry logic to fix the issue.
BUG=1362
TEST=manually
Review URL: http://codereview.chromium.org/543170
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36987 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/language_library.cc')
-rw-r--r-- | chrome/browser/chromeos/language_library.cc | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/chrome/browser/chromeos/language_library.cc b/chrome/browser/chromeos/language_library.cc index 69efcec..64ba71a0 100644 --- a/chrome/browser/chromeos/language_library.cc +++ b/chrome/browser/chromeos/language_library.cc @@ -42,13 +42,10 @@ bool FindAndUpdateProperty(const chromeos::ImeProperty& new_prop, namespace chromeos { LanguageLibrary::LanguageLibrary() : language_status_connection_(NULL) { - if (EnsureLoaded()) { - Init(); - } } LanguageLibrary::~LanguageLibrary() { - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { chromeos::DisconnectLanguageStatus(language_status_connection_); } } @@ -61,11 +58,6 @@ LanguageLibrary* LanguageLibrary::Get() { return Singleton<LanguageLibrary>::get(); } -// static -bool LanguageLibrary::EnsureLoaded() { - return CrosLibrary::EnsureLoaded(); -} - void LanguageLibrary::AddObserver(Observer* observer) { observers_.AddObserver(observer); } @@ -76,7 +68,7 @@ void LanguageLibrary::RemoveObserver(Observer* observer) { chromeos::InputLanguageList* LanguageLibrary::GetActiveLanguages() { chromeos::InputLanguageList* result = NULL; - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { result = chromeos::GetActiveLanguages(language_status_connection_); } return result ? result : CreateFallbackInputLanguageList(); @@ -84,7 +76,7 @@ chromeos::InputLanguageList* LanguageLibrary::GetActiveLanguages() { chromeos::InputLanguageList* LanguageLibrary::GetSupportedLanguages() { chromeos::InputLanguageList* result = NULL; - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { result = chromeos::GetSupportedLanguages(language_status_connection_); } return result ? result : CreateFallbackInputLanguageList(); @@ -92,14 +84,14 @@ chromeos::InputLanguageList* LanguageLibrary::GetSupportedLanguages() { void LanguageLibrary::ChangeLanguage( LanguageCategory category, const std::string& id) { - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { chromeos::ChangeLanguage(language_status_connection_, category, id.c_str()); } } void LanguageLibrary::ActivateImeProperty(const std::string& key) { DCHECK(!key.empty()); - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { chromeos::ActivateImeProperty( language_status_connection_, key.c_str()); } @@ -107,7 +99,7 @@ void LanguageLibrary::ActivateImeProperty(const std::string& key) { void LanguageLibrary::DeactivateImeProperty(const std::string& key) { DCHECK(!key.empty()); - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { chromeos::DeactivateImeProperty( language_status_connection_, key.c_str()); } @@ -116,7 +108,7 @@ void LanguageLibrary::DeactivateImeProperty(const std::string& key) { bool LanguageLibrary::ActivateLanguage( LanguageCategory category, const std::string& id) { bool success = false; - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { success = chromeos::ActivateLanguage(language_status_connection_, category, id.c_str()); } @@ -126,7 +118,7 @@ bool LanguageLibrary::ActivateLanguage( bool LanguageLibrary::DeactivateLanguage( LanguageCategory category, const std::string& id) { bool success = false; - if (EnsureLoaded()) { + if (EnsureLoadedAndStarted()) { success = chromeos::DeactivateLanguage(language_status_connection_, category, id.c_str()); } @@ -154,13 +146,21 @@ void LanguageLibrary::UpdatePropertyHandler( language_library->UpdateProperty(prop_list); } -void LanguageLibrary::Init() { +bool LanguageLibrary::EnsureStarted() { + if (language_status_connection_) { + return true; + } chromeos::LanguageStatusMonitorFunctions monitor_functions; monitor_functions.current_language = &LanguageChangedHandler; monitor_functions.register_ime_properties = &RegisterPropertiesHandler; monitor_functions.update_ime_property = &UpdatePropertyHandler; language_status_connection_ = chromeos::MonitorLanguageStatus(monitor_functions, this); + return language_status_connection_ != NULL; +} + +bool LanguageLibrary::EnsureLoadedAndStarted() { + return CrosLibrary::EnsureLoaded() && EnsureStarted(); } void LanguageLibrary::UpdateCurrentLanguage( |