| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef CHROME_BROWSER_CHROMEOS_CROS_LANGUAGE_LIBRARY_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_CROS_LANGUAGE_LIBRARY_H_ |
| 6 #define CHROME_BROWSER_CHROMEOS_CROS_LANGUAGE_LIBRARY_H_ | 6 #define CHROME_BROWSER_CHROMEOS_CROS_LANGUAGE_LIBRARY_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "base/observer_list.h" | 12 #include "base/observer_list.h" |
| 13 #include "base/time.h" | 13 #include "base/time.h" |
| 14 #include "base/timer.h" | 14 #include "base/timer.h" |
| 15 #include "third_party/cros/chromeos_input_method.h" | 15 #include "third_party/cros/chromeos_input_method.h" |
| 16 | 16 |
| 17 namespace chromeos { | 17 namespace chromeos { |
| 18 | 18 |
| 19 // This class handles the interaction with the ChromeOS language library APIs. | 19 // This class handles the interaction with the ChromeOS language library APIs. |
| 20 // Classes can add themselves as observers. Users can get an instance of this | 20 // Classes can add themselves as observers. Users can get an instance of this |
| 21 // library class like this: LanguageLibrary::Get() | 21 // library class like this: LanguageLibrary::Get() |
| 22 class LanguageLibrary { | 22 class LanguageLibrary { |
| 23 public: | 23 public: |
| 24 class Observer { | 24 class Observer { |
| 25 public: | 25 public: |
| 26 virtual ~Observer() = 0; | 26 virtual ~Observer() = 0; |
| 27 virtual void InputMethodChanged(LanguageLibrary* obj) = 0; | 27 virtual void InputMethodChanged(LanguageLibrary* obj) = 0; |
| 28 virtual void ImePropertiesChanged(LanguageLibrary* obj) = 0; | 28 virtual void ImePropertiesChanged(LanguageLibrary* obj) = 0; |
| 29 virtual void FocusChanged(LanguageLibrary* obj) = 0; | |
| 30 }; | 29 }; |
| 31 virtual ~LanguageLibrary() {} | 30 virtual ~LanguageLibrary() {} |
| 32 | 31 |
| 33 virtual void AddObserver(Observer* observer) = 0; | 32 virtual void AddObserver(Observer* observer) = 0; |
| 34 virtual void RemoveObserver(Observer* observer) = 0; | 33 virtual void RemoveObserver(Observer* observer) = 0; |
| 35 | 34 |
| 36 // Returns the list of input methods we can select (i.e. active). If the cros | 35 // Returns the list of input methods we can select (i.e. active). If the cros |
| 37 // library is not found or IBus/DBus daemon is not alive, this function | 36 // library is not found or IBus/DBus daemon is not alive, this function |
| 38 // returns a fallback input method list (and never returns NULL). | 37 // returns a fallback input method list (and never returns NULL). |
| 39 virtual InputMethodDescriptors* GetActiveInputMethods() = 0; | 38 virtual InputMethodDescriptors* GetActiveInputMethods() = 0; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 // the request and returns false. | 72 // the request and returns false. |
| 74 // You can specify |section| and |config_name| arguments in the same way | 73 // You can specify |section| and |config_name| arguments in the same way |
| 75 // as GetImeConfig() above. | 74 // as GetImeConfig() above. |
| 76 virtual bool SetImeConfig(const char* section, | 75 virtual bool SetImeConfig(const char* section, |
| 77 const char* config_name, | 76 const char* config_name, |
| 78 const ImeConfigValue& value) = 0; | 77 const ImeConfigValue& value) = 0; |
| 79 | 78 |
| 80 virtual const InputMethodDescriptor& current_input_method() const = 0; | 79 virtual const InputMethodDescriptor& current_input_method() const = 0; |
| 81 | 80 |
| 82 virtual const ImePropertyList& current_ime_properties() const = 0; | 81 virtual const ImePropertyList& current_ime_properties() const = 0; |
| 83 virtual bool is_focused() const = 0; | |
| 84 | 82 |
| 85 // Normalizes the language code and returns the normalized version. The | 83 // Normalizes the language code and returns the normalized version. The |
| 86 // function normalizes the given language code to be compatible with the | 84 // function normalizes the given language code to be compatible with the |
| 87 // one used in Chrome's application locales. Otherwise, returns the | 85 // one used in Chrome's application locales. Otherwise, returns the |
| 88 // given language code as-is. | 86 // given language code as-is. |
| 89 // | 87 // |
| 90 // Examples: | 88 // Examples: |
| 91 // | 89 // |
| 92 // - "zh_CN" => "zh-CN" (Use - instead of _) | 90 // - "zh_CN" => "zh-CN" (Use - instead of _) |
| 93 // - "jpn" => "ja" (Use two-letter code) | 91 // - "jpn" => "ja" (Use two-letter code) |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 const ImeConfigValue& value); | 135 const ImeConfigValue& value); |
| 138 | 136 |
| 139 virtual const InputMethodDescriptor& current_input_method() const { | 137 virtual const InputMethodDescriptor& current_input_method() const { |
| 140 return current_input_method_; | 138 return current_input_method_; |
| 141 } | 139 } |
| 142 | 140 |
| 143 virtual const ImePropertyList& current_ime_properties() const { | 141 virtual const ImePropertyList& current_ime_properties() const { |
| 144 return current_ime_properties_; | 142 return current_ime_properties_; |
| 145 } | 143 } |
| 146 | 144 |
| 147 virtual bool is_focused() const { | |
| 148 return is_focused_; | |
| 149 } | |
| 150 | |
| 151 private: | 145 private: |
| 152 // This method is called when there's a change in input method status. | 146 // This method is called when there's a change in input method status. |
| 153 static void InputMethodChangedHandler( | 147 static void InputMethodChangedHandler( |
| 154 void* object, const InputMethodDescriptor& current_input_method); | 148 void* object, const InputMethodDescriptor& current_input_method); |
| 155 | 149 |
| 156 // This method is called when an input method sends "RegisterProperties" | 150 // This method is called when an input method sends "RegisterProperties" |
| 157 // signal. | 151 // signal. |
| 158 static void RegisterPropertiesHandler( | 152 static void RegisterPropertiesHandler( |
| 159 void* object, const ImePropertyList& prop_list); | 153 void* object, const ImePropertyList& prop_list); |
| 160 | 154 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 180 // This will notify all the Observers. | 174 // This will notify all the Observers. |
| 181 void UpdateCurrentInputMethod( | 175 void UpdateCurrentInputMethod( |
| 182 const InputMethodDescriptor& current_input_method); | 176 const InputMethodDescriptor& current_input_method); |
| 183 | 177 |
| 184 // Called by the handler to register input method properties. | 178 // Called by the handler to register input method properties. |
| 185 void RegisterProperties(const ImePropertyList& prop_list); | 179 void RegisterProperties(const ImePropertyList& prop_list); |
| 186 | 180 |
| 187 // Called by the handler to update input method properties. | 181 // Called by the handler to update input method properties. |
| 188 void UpdateProperty(const ImePropertyList& prop_list); | 182 void UpdateProperty(const ImePropertyList& prop_list); |
| 189 | 183 |
| 190 // Called by the handler to notify focus changes. | |
| 191 void FocusChanged(bool is_focused); | |
| 192 | |
| 193 // Tries to send all pending SetImeConfig requests to the input method config | 184 // Tries to send all pending SetImeConfig requests to the input method config |
| 194 // daemon. | 185 // daemon. |
| 195 void FlushImeConfig(); | 186 void FlushImeConfig(); |
| 196 | 187 |
| 197 // A reference to the language api, to allow callbacks when the input method | 188 // A reference to the language api, to allow callbacks when the input method |
| 198 // status changes. | 189 // status changes. |
| 199 InputMethodStatusConnection* input_method_status_connection_; | 190 InputMethodStatusConnection* input_method_status_connection_; |
| 200 ObserverList<Observer> observers_; | 191 ObserverList<Observer> observers_; |
| 201 | 192 |
| 202 // The input method which is currently selected. | 193 // The input method which is currently selected. |
| 203 InputMethodDescriptor current_input_method_; | 194 InputMethodDescriptor current_input_method_; |
| 204 | 195 |
| 205 // The input method properties which the current input method uses. The list | 196 // The input method properties which the current input method uses. The list |
| 206 // might be empty when no input method is used. | 197 // might be empty when no input method is used. |
| 207 ImePropertyList current_ime_properties_; | 198 ImePropertyList current_ime_properties_; |
| 208 | 199 |
| 209 // true if a text input area in Chrome is focused. | |
| 210 bool is_focused_; | |
| 211 | |
| 212 typedef std::pair<std::string, std::string> ConfigKeyType; | 200 typedef std::pair<std::string, std::string> ConfigKeyType; |
| 213 typedef std::map<ConfigKeyType, ImeConfigValue> InputMethodConfigRequests; | 201 typedef std::map<ConfigKeyType, ImeConfigValue> InputMethodConfigRequests; |
| 214 // SetImeConfig requests that are not yet completed. | 202 // SetImeConfig requests that are not yet completed. |
| 215 // Use a map to queue config requests, so we only send the last request for | 203 // Use a map to queue config requests, so we only send the last request for |
| 216 // the same config key (i.e. we'll discard ealier requests for the same | 204 // the same config key (i.e. we'll discard ealier requests for the same |
| 217 // config key). As we discard old requests for the same config key, the order | 205 // config key). As we discard old requests for the same config key, the order |
| 218 // of requests doesn't matter, so it's safe to use a map. | 206 // of requests doesn't matter, so it's safe to use a map. |
| 219 InputMethodConfigRequests pending_config_requests_; | 207 InputMethodConfigRequests pending_config_requests_; |
| 220 | 208 |
| 221 // A timer for retrying to send |pendning_config_commands_| to the input | 209 // A timer for retrying to send |pendning_config_commands_| to the input |
| 222 // method config daemon. | 210 // method config daemon. |
| 223 base::OneShotTimer<LanguageLibraryImpl> timer_; | 211 base::OneShotTimer<LanguageLibraryImpl> timer_; |
| 224 | 212 |
| 225 DISALLOW_COPY_AND_ASSIGN(LanguageLibraryImpl); | 213 DISALLOW_COPY_AND_ASSIGN(LanguageLibraryImpl); |
| 226 }; | 214 }; |
| 227 | 215 |
| 228 } // namespace chromeos | 216 } // namespace chromeos |
| 229 | 217 |
| 230 #endif // CHROME_BROWSER_CHROMEOS_CROS_LANGUAGE_LIBRARY_H_ | 218 #endif // CHROME_BROWSER_CHROMEOS_CROS_LANGUAGE_LIBRARY_H_ |
| OLD | NEW |