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

Unified Diff: chrome/browser/chromeos/language_library.cc

Issue 449050: Implement "Language Switcher" for Chromium OS. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/language_library.h ('k') | chrome/browser/chromeos/language_menu_button.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/language_library.cc
===================================================================
--- chrome/browser/chromeos/language_library.cc (revision 0)
+++ chrome/browser/chromeos/language_library.cc (revision 0)
@@ -0,0 +1,100 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/language_library.h"
+
+#include "base/message_loop.h"
+#include "base/string_util.h"
+#include "chrome/browser/chrome_thread.h"
+#include "chrome/browser/chromeos/cros_library.h"
+
+// Allows InvokeLater without adding refcounting. This class is a Singleton and
+// won't be deleted until it's last InvokeLater is run.
+template <>
+struct RunnableMethodTraits<chromeos::LanguageLibrary> {
+ void RetainCallee(chromeos::LanguageLibrary* obj) {}
+ void ReleaseCallee(chromeos::LanguageLibrary* obj) {}
+};
+
+namespace chromeos {
+
+LanguageLibrary::LanguageLibrary() : language_status_connection_(NULL) {
+ if (EnsureLoaded()) {
+ Init();
+ }
+}
+
+LanguageLibrary::~LanguageLibrary() {
+ if (EnsureLoaded()) {
+ chromeos::DisconnectLanguageStatus(language_status_connection_);
+ }
+}
+
+LanguageLibrary::Observer::~Observer() {
+}
+
+// static
+LanguageLibrary* LanguageLibrary::Get() {
+ return Singleton<LanguageLibrary>::get();
+}
+
+// static
+bool LanguageLibrary::EnsureLoaded() {
+ return CrosLibrary::EnsureLoaded();
+}
+
+void LanguageLibrary::AddObserver(Observer* observer) {
+ observers_.AddObserver(observer);
+}
+
+void LanguageLibrary::RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+chromeos::InputLanguageList* LanguageLibrary::GetLanguages() {
+ chromeos::InputLanguageList* result = NULL;
+ if (EnsureLoaded()) {
+ result = chromeos::GetLanguages(language_status_connection_);
+ }
+ return result ? result : CreateFallbackInputLanguageList();
+}
+
+void LanguageLibrary::ChangeLanguage(
+ LanguageCategory category, const std::string& id) {
+ if (EnsureLoaded()) {
+ chromeos::ChangeLanguage(language_status_connection_, category, id.c_str());
+ }
+}
+
+// static
+void LanguageLibrary::LanguageChangedHandler(
+ void* object, const chromeos::InputLanguage& current_language) {
+ LanguageLibrary* language_library = static_cast<LanguageLibrary*>(object);
+ language_library->UpdateCurrentLanguage(current_language);
+}
+
+void LanguageLibrary::Init() {
+ language_status_connection_ = chromeos::MonitorLanguageStatus(
+ &LanguageChangedHandler, this);
+}
+
+void LanguageLibrary::UpdateCurrentLanguage(
+ const chromeos::InputLanguage& current_language) {
+ // Make sure we run on UI thread.
+ if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) {
+ DLOG(INFO) << "UpdateCurrentLanguage (Background thread)";
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ // NewRunnableMethod() copies |current_language| by value.
+ NewRunnableMethod(
+ this, &LanguageLibrary::UpdateCurrentLanguage, current_language));
+ return;
+ }
+
+ DLOG(INFO) << "UpdateCurrentLanguage (UI thread)";
+ current_language_ = current_language;
+ FOR_EACH_OBSERVER(Observer, observers_, LanguageChanged(this));
+}
+
+} // namespace chromeos
Property changes on: chrome/browser/chromeos/language_library.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/chromeos/language_library.h ('k') | chrome/browser/chromeos/language_menu_button.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698