From 6ce58d1d79e5b175865ee26794e9fc7ce576ce56 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Mon, 8 Nov 2010 14:12:35 +0900 Subject: [PATCH] Fix build with ibus-1.4. This patch adds compatibility code for the API changes of IBusConfig and IBusEngineDesc in ibus-1.3 -> ibus-1.4. --- src/engine.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/engine.c b/src/engine.c index 79db70f..a297e4d 100644 --- a/src/engine.c +++ b/src/engine.c @@ -111,7 +111,11 @@ static void ibus_hangul_engine_update_lookup_table static void ibus_config_value_changed (IBusConfig *config, const gchar *section, const gchar *name, +#if IBUS_CHECK_VERSION(1,3,99) + GVariant *value, +#else GValue *value, +#endif /* !IBUS_CHECK_VERSION(1,3,99) */ gpointer user_data); static void lookup_table_set_visible (IBusLookupTable *table, @@ -136,6 +140,11 @@ static gboolean hanja_key_list_match (HanjaKeyList *list, static gboolean hanja_key_list_has_modifier (HanjaKeyList *list, guint keyval); +static gboolean config_get_string (IBusConfig *config, + const gchar *section, + const gchar *name, + gchar **result); + static IBusEngineClass *parent_class = NULL; static HanjaTable *hanja_table = NULL; static HanjaTable *symbol_table = NULL; @@ -176,7 +185,7 @@ void ibus_hangul_init (IBusBus *bus) { gboolean res; - GValue value = { 0, }; + gchar *str; hanja_table = hanja_table_load (NULL); @@ -187,22 +196,20 @@ ibus_hangul_init (IBusBus *bus) g_object_ref_sink (config); hangul_keyboard = g_string_new_len ("2", 8); - res = ibus_config_get_value (config, "engine/Hangul", - "HangulKeyboard", &value); + str = NULL; + res = config_get_string (config, "engine/Hangul", "HangulKeyboard", &str); if (res) { - const gchar* str = g_value_get_string (&value); g_string_assign (hangul_keyboard, str); - g_value_unset(&value); + g_free (str); } hanja_key_list_init(&hanja_keys); - res = ibus_config_get_value (config, "engine/Hangul", - "HanjaKeys", &value); + str = NULL; + res = config_get_string (config, "engine/Hangul", "HanjaKeys", &str); if (res) { - const gchar* str = g_value_get_string (&value); hanja_key_list_set_from_string(&hanja_keys, str); - g_value_unset(&value); + g_free (str); } else { hanja_key_list_append(&hanja_keys, IBUS_Hangul_Hanja, 0); hanja_key_list_append(&hanja_keys, IBUS_F9, 0); @@ -963,27 +970,71 @@ ibus_hangul_engine_property_activate (IBusEngine *engine, } } +static gboolean +config_get_string (IBusConfig *config, + const gchar *section, + const gchar *name, + gchar **result) +{ +#if IBUS_CHECK_VERSION(1,3,99) + GVariant *value = NULL; + + g_return_val_if_fail (result != NULL, FALSE); + + value = ibus_config_get_value (config, section, name); + if (value) { + *result = g_strdup (g_variant_get_string (value, NULL)); + g_variant_unref (value); + return TRUE; + } + return FALSE; +#else + GValue value = { 0 }; + + g_return_val_if_fail (result != NULL, FALSE); + + if (ibus_config_get_value (config, section, name, &value)) { + *result = g_strdup (g_value_get_string (&value)); + g_value_unset (&value); + return TRUE; + } + return FALSE; +#endif /* !IBUS_CHECK_VERSION(1,3,99) */ +} + +#if IBUS_CHECK_VERSION(1,3,99) +#define _g_variant_get_string g_variant_get_string +#define _g_variant_get_int32 g_variant_get_int32 +#else +#define _g_variant_get_string(value, length) g_value_get_string(value) +#define _g_variant_get_int32 g_value_get_int +#endif /* !IBUS_CHECK_VERSION(1,3,99) */ + static void ibus_config_value_changed (IBusConfig *config, const gchar *section, const gchar *name, +#if IBUS_CHECK_VERSION(1,3,99) + GVariant *value, +#else GValue *value, +#endif /* !IBUS_CHECK_VERSION(1,3,99) */ gpointer user_data) { IBusHangulEngine *hangul = (IBusHangulEngine *) user_data; if (strcmp(section, "engine/Hangul") == 0) { if (strcmp(name, "HangulKeyboard") == 0) { - const gchar *str = g_value_get_string (value); + const gchar *str = _g_variant_get_string (value, NULL); g_string_assign (hangul_keyboard, str); hangul_ic_select_keyboard (hangul->context, hangul_keyboard->str); } else if (strcmp(name, "HanjaKeys") == 0) { - const gchar* str = g_value_get_string (value); + const gchar* str = _g_variant_get_string (value, NULL); hanja_key_list_set_from_string(&hanja_keys, str); } } else if (strcmp(section, "panel") == 0) { if (strcmp(name, "lookup_table_orientation") == 0) { - lookup_table_orientation = g_value_get_int (value); + lookup_table_orientation = _g_variant_get_int32 (value); } } } -- 1.7.5.1