| Index: chromeos_language.h
|
| diff --git a/chromeos_language.h b/chromeos_language.h
|
| index 1dfa7af63a3209933e343f22128c6c05e886f416..78e38eaad2b0bcf0d6522e336bdc2cda6c68fdaf 100644
|
| --- a/chromeos_language.h
|
| +++ b/chromeos_language.h
|
| @@ -5,13 +5,16 @@
|
| #ifndef CHROMEOS_LANGUAGE_H_
|
| #define CHROMEOS_LANGUAGE_H_
|
|
|
| +#include <sstream>
|
| #include <string>
|
| #include <vector>
|
|
|
| #include <base/basictypes.h>
|
| +#include <base/logging.h> // DCHECK
|
|
|
| static const char kFallbackXKBId[] = "USA";
|
| static const char kFallbackXKBDisplayName[] = "US";
|
| +static const int kInvalidSelectionItemId = -1;
|
|
|
| namespace chromeos {
|
|
|
| @@ -22,18 +25,17 @@ enum LanguageCategory {
|
|
|
| // A structure which represents an IME language or a XKB layout.
|
| struct InputLanguage {
|
| - InputLanguage(LanguageCategory category,
|
| - const std::string& id,
|
| - const std::string& display_name,
|
| - const std::string& icon_path)
|
| - : category(category),
|
| - id(id),
|
| - display_name(display_name),
|
| - icon_path(icon_path) {
|
| + InputLanguage(LanguageCategory in_category,
|
| + const std::string& in_id,
|
| + const std::string& in_display_name,
|
| + const std::string& in_icon_path)
|
| + : category(in_category),
|
| + id(in_id),
|
| + display_name(in_display_name),
|
| + icon_path(in_icon_path) {
|
| }
|
|
|
| - InputLanguage()
|
| - : category(LANGUAGE_CATEGORY_XKB) {
|
| + InputLanguage() : category(LANGUAGE_CATEGORY_XKB) {
|
| }
|
|
|
| // Languages are sorted by category, then by display_name, then by id.
|
| @@ -64,6 +66,59 @@ struct InputLanguage {
|
| };
|
| typedef std::vector<InputLanguage> InputLanguageList;
|
|
|
| +// A structure which represents a property for an IME engine. For details,
|
| +// please check a comment for the LanguageRegisterImePropertiesFunction typedef
|
| +// below.
|
| +struct ImeProperty {
|
| + // TODO(yusukes): it might be better to use protocol buffers rather than the
|
| + // plain C++ struct.
|
| + ImeProperty(const std::string& in_key,
|
| + const std::string& in_icon_path,
|
| + const std::string& in_label,
|
| + bool in_is_selection_item,
|
| + bool in_is_selection_item_checked,
|
| + int in_selection_item_id)
|
| + : key(in_key),
|
| + icon_path(in_icon_path),
|
| + label(in_label),
|
| + is_selection_item(in_is_selection_item),
|
| + is_selection_item_checked(in_is_selection_item_checked),
|
| + selection_item_id(in_selection_item_id) {
|
| + DCHECK(!key.empty());
|
| + }
|
| +
|
| + ImeProperty()
|
| + : is_selection_item(false),
|
| + is_selection_item_checked(false),
|
| + selection_item_id(kInvalidSelectionItemId) {
|
| + }
|
| +
|
| + // Debug print function.
|
| + std::string ToString() const {
|
| + std::stringstream stream;
|
| + stream << "key=" << key
|
| + << ", icon_path=" << icon_path
|
| + << ", label=" << label
|
| + << ", is_selection_item=" << is_selection_item
|
| + << ", is_selection_item_checked=" << is_selection_item_checked
|
| + << ", selection_item_id=" << selection_item_id;
|
| + return stream.str();
|
| + }
|
| +
|
| + std::string key; // A key which identifies the property. Non-empty string.
|
| + // (e.g. "InputMode.HalfWidthKatakana")
|
| + std::string icon_path; // Path to an icon. Can be empty.
|
| + std::string label; // A description of the property. Non-empty string.
|
| + // (e.g. "Switch to full punctuation mode", "Hiragana")
|
| + bool is_selection_item; // true if the property is a selection item.
|
| + bool is_selection_item_checked; // true if |is_selection_item| is true and
|
| + // the selection_item is selected.
|
| + int selection_item_id; // A group ID (>= 0) of the selection item.
|
| + // kInvalidSelectionItemId if |id_selection_item| is
|
| + // false.
|
| +};
|
| +typedef std::vector<ImeProperty> ImePropertyList;
|
| +
|
| // Creates dummy InputLanguageList object. Usually, this function is called only
|
| // on development enviromnent where libcros.so does not exist. So, obviously
|
| // you can not move this function to libcros.so. This function is called by
|
| @@ -78,15 +133,76 @@ inline InputLanguageList* CreateFallbackInputLanguageList() {
|
| return language_list;
|
| }
|
|
|
| -class LanguageStatusConnection;
|
| -typedef void(*LanguageStatusMonitorFunction)(
|
| +// A monitor function which is called when current IME language or XKB layout
|
| +// is changed by user.
|
| +typedef void(*LanguageCurrentLanguageMonitorFunction)(
|
| void* language_library, const InputLanguage& current_language);
|
|
|
| +// A monitor function which is called when "RegisterProperties" signal is sent
|
| +// from the candidate_window process. The signal contains a list of properties
|
| +// for a specific IME engine. For example, Japanese IME (ibus-anthy) might have
|
| +// the following properties:
|
| +//
|
| +// ----------------------------------
|
| +// key: InputMode.Hiragana
|
| +// label: Hiragana
|
| +// is_selection_item: true
|
| +// is_selection_item_checked: true
|
| +// selection_item_id: 1
|
| +// ----------------------------------
|
| +// key: InputMode.Katakana
|
| +// label: Katakana
|
| +// is_selection_item: true
|
| +// is_selection_item_checked: false
|
| +// selection_item_id: 1
|
| +// ----------------------------------
|
| +// ...
|
| +// ----------------------------------
|
| +typedef void(*LanguageRegisterImePropertiesFunction)(
|
| + void* language_library, const ImePropertyList& prop_list);
|
| +
|
| +// A monitor function which is called when "UpdateProperty" signal is sent
|
| +// from the candidate_window process. The signal contains one or more
|
| +// properties which is updated recently. Keys the signal contains are a subset
|
| +// of keys registered by the "RegisterProperties" signal above. For example,
|
| +// Japanese IME (ibus-anthy) might send the following properties:
|
| +//
|
| +// ----------------------------------
|
| +// key: InputMode.Hiragana
|
| +// label: Hiragana
|
| +// is_selection_item: true
|
| +// is_selection_item_checked: false
|
| +// selection_item_id: ...
|
| +// ----------------------------------
|
| +// key: InputMode.Katakana
|
| +// label: Katakana
|
| +// is_selection_item: true
|
| +// is_selection_item_checked: true
|
| +// selection_item_id: ...
|
| +// ----------------------------------
|
| +//
|
| +// Note: Please do not use selection_item_ids in |prop_list|. Dummy values are
|
| +// filled in the field.
|
| +typedef void(*LanguageUpdateImePropertyFunction)(
|
| + void* language_library, const ImePropertyList& prop_list);
|
| +
|
| +struct LanguageStatusMonitorFunctions {
|
| + LanguageStatusMonitorFunctions()
|
| + : current_language(NULL),
|
| + register_ime_properties(NULL),
|
| + update_ime_property(NULL) {
|
| + }
|
| + LanguageCurrentLanguageMonitorFunction current_language;
|
| + LanguageRegisterImePropertiesFunction register_ime_properties;
|
| + LanguageUpdateImePropertyFunction update_ime_property;
|
| +};
|
| +
|
| // Establishes IBus connection to the ibus-daemon and DBus connection to
|
| // the candidate window process. |monitor_function| will be called when IME
|
| // language or XKB layout is changed.
|
| +class LanguageStatusConnection;
|
| extern LanguageStatusConnection* (*MonitorLanguageStatus)(
|
| - LanguageStatusMonitorFunction monitor_funcion, void* language_library);
|
| + LanguageStatusMonitorFunctions monitor_funcions, void* language_library);
|
|
|
| // Terminates IBus and DBus connections.
|
| extern void (*DisconnectLanguageStatus)(LanguageStatusConnection* connection);
|
| @@ -117,6 +233,16 @@ extern bool (*ActivateLanguage)(LanguageStatusConnection* connection,
|
| extern bool (*DeactivateLanguage)(LanguageStatusConnection* connection,
|
| LanguageCategory category, const char* name);
|
|
|
| +// Activates an IME property identified by |key|. Examples of keys are:
|
| +// "InputMode.Katakana", "InputMode.HalfWidthKatakana", "TypingMode.Romaji",
|
| +// "TypingMode.Kana."
|
| +extern void (*ActivateImeProperty)(LanguageStatusConnection* connection,
|
| + const char* key);
|
| +
|
| +// Deactivates an IME property identified by |key|.
|
| +extern void (*DeactivateImeProperty)(LanguageStatusConnection* connection,
|
| + const char* key);
|
| +
|
| } // namespace chromeos
|
|
|
| #endif // CHROMEOS_POWER_H_
|
|
|