diff options
author | Huang Peng <shawn.p.huang@gmail.com> | 2008-10-12 09:28:51 +0800 |
---|---|---|
committer | Huang Peng <shawn.p.huang@gmail.com> | 2008-10-12 09:28:51 +0800 |
commit | f0ef83c293511c947033e803345892ac8c4ca56e (patch) | |
tree | c011ea333d16ab198fb7bfbfc8494e7c442b359c /lib/gtk2/ibusattribute.c | |
parent | 2b6cf32ad9f44a6c0b49b76687b78b30a138c707 (diff) | |
download | ibus-f0ef83c293511c947033e803345892ac8c4ca56e.tar.gz ibus-f0ef83c293511c947033e803345892ac8c4ca56e.tar.xz ibus-f0ef83c293511c947033e803345892ac8c4ca56e.zip |
Convert IBusAttribute to (uuuu)
Diffstat (limited to 'lib/gtk2/ibusattribute.c')
-rw-r--r-- | lib/gtk2/ibusattribute.c | 103 |
1 files changed, 102 insertions, 1 deletions
diff --git a/lib/gtk2/ibusattribute.c b/lib/gtk2/ibusattribute.c index eb1e717..2237509 100644 --- a/lib/gtk2/ibusattribute.c +++ b/lib/gtk2/ibusattribute.c @@ -1,4 +1,4 @@ -/* vim:set et ts=4: */ +/* vim:set et sts=4: */ /* IBus - The Input Bus * Copyright (C) 2008-2009 Huang Peng <shawn.p.huang@gmail.com> * @@ -173,3 +173,104 @@ ibus_attr_list_get (IBusAttrList *attr_list, guint index) } return attr; } + +IBusAttribute * +ibus_attribute_from_dbus_message (DBusMessageIter *iter) +{ + gint type; + DBusMessageIter sub_iter; + + guint _type, value, start_index, end_index; + + type = dbus_message_iter_get_arg_type (iter); + g_return_val_if_fail (type == DBUS_TYPE_STRUCT, NULL); + + dbus_message_iter_recurse (iter, &sub_iter); + + g_return_val_if_fail (dbus_message_iter_get_arg_type (&sub_iter) == DBUS_TYPE_UINT32, NULL); + dbus_message_iter_get_basic (&sub_iter, &_type); + dbus_message_iter_next (&sub_iter); + + g_return_val_if_fail (dbus_message_iter_get_arg_type (&sub_iter) == DBUS_TYPE_UINT32, NULL); + dbus_message_iter_get_basic (&sub_iter, &value); + dbus_message_iter_next (&sub_iter); + + g_return_val_if_fail (dbus_message_iter_get_arg_type (&sub_iter) == DBUS_TYPE_UINT32, NULL); + dbus_message_iter_get_basic (&sub_iter, &start_index); + dbus_message_iter_next (&sub_iter); + + g_return_val_if_fail (dbus_message_iter_get_arg_type (&sub_iter) == DBUS_TYPE_UINT32, NULL); + dbus_message_iter_get_basic (&sub_iter, &end_index); + dbus_message_iter_next (&sub_iter); + + dbus_message_iter_next (iter); + + return ibus_attribute_new (_type, value, start_index, end_index); +} + +IBusAttrList * +ibus_attr_list_from_dbus_message (DBusMessageIter *iter) +{ + gint type; + DBusMessageIter sub_iter; + IBusAttrList *attr_list; + + type = dbus_message_iter_get_arg_type (iter); + g_return_val_if_fail (type == DBUS_TYPE_ARRAY, NULL); + + attr_list = ibus_attr_list_new (); + + dbus_message_iter_recurse (iter, &sub_iter); + + while (dbus_message_iter_get_arg_type (&sub_iter) != DBUS_TYPE_INVALID) { + IBusAttribute *attr = ibus_attribute_from_dbus_message (&sub_iter); + if (attr == NULL) + break; + ibus_attr_list_append (attr_list, attr); + } + + dbus_message_iter_next (iter); + return attr_list; +} + +gboolean +ibus_attribute_to_dbus_message (IBusAttribute *attr, DBusMessageIter *iter) +{ + g_assert (attr != NULL); + g_assert (iter != NULL); + + DBusMessageIter sub_iter; + + dbus_message_iter_open_container(iter, DBUS_TYPE_STRUCT, 0, &sub_iter); + dbus_message_iter_append_basic (&sub_iter, DBUS_TYPE_UINT32, &attr->type); + dbus_message_iter_append_basic (&sub_iter, DBUS_TYPE_UINT32, &attr->value); + dbus_message_iter_append_basic (&sub_iter, DBUS_TYPE_UINT32, &attr->start_index); + dbus_message_iter_append_basic (&sub_iter, DBUS_TYPE_UINT32, &attr->end_index); + dbus_message_iter_close_container (iter, &sub_iter); + + return TRUE; +} + + +gboolean +ibus_attr_list_to_dbus_message (IBusAttrList *attr_list, DBusMessageIter *iter) +{ + g_assert (attr_list != NULL); + g_assert (iter != NULL); + + gint i; + DBusMessageIter sub_iter; + + dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, "(uuuu)", &sub_iter); + for (i = 0;; i++) { + IBusAttribute *attr = ibus_attr_list_get (attr_list, i); + if (attr == NULL) + break; + ibus_attribute_to_dbus_message (attr, &sub_iter); + } + dbus_message_iter_close_container (iter, &sub_iter); + return TRUE; +} + + + |