summaryrefslogtreecommitdiffstats
path: root/lib/gtk2/ibusattribute.c
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-10-12 09:28:51 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-10-12 09:28:51 +0800
commitf0ef83c293511c947033e803345892ac8c4ca56e (patch)
treec011ea333d16ab198fb7bfbfc8494e7c442b359c /lib/gtk2/ibusattribute.c
parent2b6cf32ad9f44a6c0b49b76687b78b30a138c707 (diff)
downloadibus-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.c103
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;
+}
+
+
+