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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/language_library.h"
6
7 #include "base/message_loop.h"
8 #include "base/string_util.h"
9 #include "chrome/browser/chrome_thread.h"
10 #include "chrome/browser/chromeos/cros_library.h"
11
12 // Allows InvokeLater without adding refcounting. This class is a Singleton and
13 // won't be deleted until it's last InvokeLater is run.
14 template <>
15 struct RunnableMethodTraits<chromeos::LanguageLibrary> {
16 void RetainCallee(chromeos::LanguageLibrary* obj) {}
17 void ReleaseCallee(chromeos::LanguageLibrary* obj) {}
18 };
19
20 namespace chromeos {
21
22 LanguageLibrary::LanguageLibrary() : language_status_connection_(NULL) {
23 if (EnsureLoaded()) {
24 Init();
25 }
26 }
27
28 LanguageLibrary::~LanguageLibrary() {
29 if (EnsureLoaded()) {
30 chromeos::DisconnectLanguageStatus(language_status_connection_);
31 }
32 }
33
34 LanguageLibrary::Observer::~Observer() {
35 }
36
37 // static
38 LanguageLibrary* LanguageLibrary::Get() {
39 return Singleton<LanguageLibrary>::get();
40 }
41
42 // static
43 bool LanguageLibrary::EnsureLoaded() {
44 return CrosLibrary::EnsureLoaded();
45 }
46
47 void LanguageLibrary::AddObserver(Observer* observer) {
48 observers_.AddObserver(observer);
49 }
50
51 void LanguageLibrary::RemoveObserver(Observer* observer) {
52 observers_.RemoveObserver(observer);
53 }
54
55 chromeos::InputLanguageList* LanguageLibrary::GetLanguages() {
56 chromeos::InputLanguageList* result = NULL;
57 if (EnsureLoaded()) {
58 result = chromeos::GetLanguages(language_status_connection_);
59 }
60 return result ? result : CreateFallbackInputLanguageList();
61 }
62
63 void LanguageLibrary::ChangeLanguage(
64 LanguageCategory category, const std::string& id) {
65 if (EnsureLoaded()) {
66 chromeos::ChangeLanguage(language_status_connection_, category, id.c_str());
67 }
68 }
69
70 // static
71 void LanguageLibrary::LanguageChangedHandler(
72 void* object, const chromeos::InputLanguage& current_language) {
73 LanguageLibrary* language_library = static_cast<LanguageLibrary*>(object);
74 language_library->UpdateCurrentLanguage(current_language);
75 }
76
77 void LanguageLibrary::Init() {
78 language_status_connection_ = chromeos::MonitorLanguageStatus(
79 &LanguageChangedHandler, this);
80 }
81
82 void LanguageLibrary::UpdateCurrentLanguage(
83 const chromeos::InputLanguage& current_language) {
84 // Make sure we run on UI thread.
85 if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) {
86 DLOG(INFO) << "UpdateCurrentLanguage (Background thread)";
87 ChromeThread::PostTask(
88 ChromeThread::UI, FROM_HERE,
89 // NewRunnableMethod() copies |current_language| by value.
90 NewRunnableMethod(
91 this, &LanguageLibrary::UpdateCurrentLanguage, current_language));
92 return;
93 }
94
95 DLOG(INFO) << "UpdateCurrentLanguage (UI thread)";
96 current_language_ = current_language;
97 FOR_EACH_OBSERVER(Observer, observers_, LanguageChanged(this));
98 }
99
100 } // namespace chromeos
OLDNEW
« 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