Index: client/deps/ibusclient/src/ibusclient.cc |
diff --git a/client/deps/ibusclient/src/ibusclient.cc b/client/deps/ibusclient/src/ibusclient.cc |
index eabed340b322f966e9e831fb9ccc00d1cf7c123a..c4dde346f1a8760e45681f991fc000f89c261e09 100644 |
--- a/client/deps/ibusclient/src/ibusclient.cc |
+++ b/client/deps/ibusclient/src/ibusclient.cc |
@@ -27,6 +27,9 @@ const gchar* kDummyValueStringArray[kArraySize] = { |
"DUMMY_VALUE 1", "DUMMY_VALUE 2", "DUMMY_VALUE 3", |
}; |
+const char kGeneralSectionName[] = "general"; |
+const char kPreloadEnginesConfigName[] = "preload_engines"; |
+ |
// Converts |list_type_string| into its element type (e.g. "int_list" to "int"). |
std::string GetElementType(const std::string& list_type_string) { |
const std::string suffix = "_list"; |
@@ -104,7 +107,7 @@ void SetConfigAndPrintResult( |
} |
g_value_take_boxed(&gvalue, array); |
- } |
+ } |
if (ibus_config_set_value( |
ibus_config, kDummySection, kDummyConfigName, &gvalue)) { |
@@ -130,7 +133,7 @@ void GetConfigAndPrintResult( |
printf("FAIL (type mismatch)\n"); |
return; |
} |
- |
+ |
if (gtype== G_TYPE_BOOLEAN) { |
if (g_value_get_boolean(&gvalue) != kDummyValueBoolean) { |
printf("FAIL (value mismatch)\n"); |
@@ -200,6 +203,105 @@ void GetConfigAndPrintResult( |
printf("OK\n"); |
} |
+// Prints out the array held in gvalue. It is assumed that the array contains |
+// G_TYPE_STRING values. |
+// On success, returns true |
+// On failure, prints out "FAIL (error message)" and returns false |
+bool PrintArray(GValue* gvalue) { |
+ GValueArray* array = |
+ reinterpret_cast<GValueArray*>(g_value_get_boxed(gvalue)); |
+ for (guint i = 0; array && (i < array->n_values); ++i) { |
+ const GType element_type = G_VALUE_TYPE(&(array->values[i])); |
+ if (element_type != G_TYPE_STRING) { |
+ printf("FAIL (Array element type is not STRING)\n"); |
+ return false; |
+ } |
+ const char* value = g_value_get_string(&(array->values[i])); |
+ if (!value) { |
+ printf("FAIL (Array element type is NULL)\n"); |
+ return false; |
+ } |
+ printf("%s\n", value); |
+ } |
+ return true; |
+} |
+ |
+// Print out the list of unused config variables from ibus. |
+// On failure, prints out "FAIL (error message)" instead. |
+void PrintUnused(IBusConfig* ibus_config) { |
+ GValue unread = {0}; |
+ GValue unwritten = {0}; |
+ if (!ibus_config_get_unused(ibus_config, &unread, &unwritten)) { |
+ printf("FAIL (get_unused failed)\n"); |
+ return; |
+ } |
+ |
+ if (G_VALUE_TYPE(&unread) != G_TYPE_VALUE_ARRAY) { |
+ printf("FAIL (unread is not an array)\n"); |
+ return; |
+ } |
+ |
+ if (G_VALUE_TYPE(&unwritten) != G_TYPE_VALUE_ARRAY) { |
+ printf("FAIL (unwritten is not an array)\n"); |
+ return; |
+ } |
+ |
+ printf("Unread:\n"); |
+ if (!PrintArray(&unread)) { |
+ g_value_unset(&unread); |
+ g_value_unset(&unwritten); |
+ return; |
+ } |
+ |
+ printf("Unwritten:\n"); |
+ if (!PrintArray(&unwritten)) { |
+ g_value_unset(&unread); |
+ g_value_unset(&unwritten); |
+ return; |
+ } |
+ |
+ g_value_unset(&unread); |
+ g_value_unset(&unwritten); |
+ return; |
+} |
+ |
+// Set the preload engines to those named in the array |engines| of size |
+// |num_engines| and prints the result. |
+// |
+// Note that this only fails if it can't set the config value; it does not check |
+// that the names of the engines are valid. |
+void PreloadEnginesAndPrintResult(IBusConfig* ibus_config, int num_engines, |
+ char** engines) { |
+ GValue gvalue = {0}; |
+ g_value_init(&gvalue, G_TYPE_VALUE_ARRAY); |
+ GValueArray* array = g_value_array_new(num_engines); |
+ for (int i = 0; i < num_engines; ++i) { |
+ GValue array_element = {0}; |
+ g_value_init(&array_element, G_TYPE_STRING); |
+ g_value_set_string(&array_element, engines[i]); |
+ g_value_array_append(array, &array_element); |
+ } |
+ g_value_take_boxed(&gvalue, array); |
+ |
+ if (ibus_config_set_value(ibus_config, kGeneralSectionName, |
+ kPreloadEnginesConfigName, &gvalue)) { |
+ printf("OK\n"); |
+ } else { |
+ printf("FAIL\n"); |
+ } |
+ |
+ g_value_unset(&gvalue); |
+} |
+ |
+// Sets |engine_name| as the active IME engine. |
+void ActivateEngineAndPrintResult(IBusBus* ibus, const char* engine_name) { |
+ if (!ibus_bus_set_global_engine(ibus, engine_name)) { |
+ printf("FAIL (could not start engine)\n"); |
+ } else { |
+ printf("OK\n"); |
+ } |
+} |
+ |
// Prints the names of the given engines. Takes the ownership of |engines|. |
void PrintEngineNames(GList* engines) { |
for (GList* cursor = engines; cursor; cursor = g_list_next(cursor)) { |
@@ -226,6 +328,9 @@ void PrintUsage(const char* argv0) { |
" Get a dummy value from ibus config service\n"); |
// TODO(yusukes): Add config_key parameter to unset_config. |
printf("unset_config Unset a dummy value from ibus config service\n"); |
+ printf("get_unused List all keys that never were used.\n"); |
+ printf("preload_engines Preload the listed engines.\n"); |
+ printf("activate_engine Activate the specified engine.\n"); |
} |
} // namespace |
@@ -275,6 +380,23 @@ int main(int argc, char **argv) { |
GetConfigAndPrintResult(ibus_config, argv[2]); |
} else if (command == "unset_config") { |
UnsetConfigAndPrintResult(ibus_config); |
+ } else if (command == "get_unused") { |
+ PrintUnused(ibus_config); |
+ } else if (command == "preload_engines") { |
+ if (argc < 3) { |
+ PrintUsage(argv[0]); |
+ return 1; |
+ } |
+ PreloadEnginesAndPrintResult(ibus_config, argc-2, &(argv[2])); |
+ } else if (command == "activate_engine") { |
+ if (argc != 3) { |
+ PrintUsage(argv[0]); |
+ return 1; |
+ } |
+ ActivateEngineAndPrintResult(ibus, argv[2]); |
+ } else { |
+ PrintUsage(argv[0]); |
+ return 1; |
} |
return 0; |