static IBusMessage * _dbus_list_names (BusDBusImpl *dbus, IBusMessage *message, BusConnection *connection) { IBusMessage *reply_message; IBusMessageIter iter, sub_iter; GList *name, *names; reply_message = ibus_message_new_method_return (message); ibus_message_iter_init_append (message, &iter); ibus_message_iter_open_container (&iter, IBUS_TYPE_ARRAY, "s", &sub_iter); // append unique names names = g_hash_table_get_keys (dbus->unique_names); names = g_list_sort (names, (GCompareFunc) g_strcmp0); for (name = names; name != NULL; name = name->next) { ibus_message_iter_append (&sub_iter, G_TYPE_STRING, &(name->data)); } g_list_free (names); // append well-known names names = g_hash_table_get_keys (dbus->names); names = g_list_sort (names, (GCompareFunc) g_strcmp0); for (name = names; name != NULL; name = name->next) { ibus_message_iter_append (&sub_iter, G_TYPE_STRING, &(name->data)); } g_list_free (names); ibus_message_iter_close_container (&iter, &sub_iter); return reply_message; }
static gboolean ibus_attribute_serialize (IBusAttribute *attr, IBusMessageIter *iter) { gboolean retval; retval = parent_class->serialize ((IBusSerializable *) attr, iter); g_return_val_if_fail (retval, FALSE); g_return_val_if_fail (IBUS_IS_ATTRIBUTE (attr), FALSE); retval = ibus_message_iter_append (iter, G_TYPE_UINT, &attr->type); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_UINT, &attr->value); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_UINT, &attr->start_index); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_UINT, &attr->end_index); g_return_val_if_fail (retval, FALSE); return TRUE; }
static gboolean ibus_engine_desc_serialize (IBusEngineDesc *desc, IBusMessageIter *iter) { gboolean retval; retval = parent_class->serialize ((IBusSerializable *)desc, iter); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->name); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->longname); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->description); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->language); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->license); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->author); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->icon); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &desc->layout); g_return_val_if_fail (retval, FALSE); return TRUE; }
static gboolean ibus_attr_list_serialize (IBusAttrList *attr_list, IBusMessageIter *iter) { IBusMessageIter array_iter; gboolean retval; guint i; retval = IBUS_SERIALIZABLE_CLASS (ibus_attr_list_parent_class)->serialize ((IBusSerializable *)attr_list, iter); g_return_val_if_fail (retval, FALSE); g_return_val_if_fail (IBUS_IS_ATTR_LIST (attr_list), FALSE); retval = ibus_message_iter_open_container (iter, IBUS_TYPE_ARRAY, "v", &array_iter); g_return_val_if_fail (retval, FALSE); for (i = 0;; i++) { IBusAttribute *attr; attr = ibus_attr_list_get (attr_list, i); if (attr == NULL) break; retval = ibus_message_iter_append (&array_iter, IBUS_TYPE_ATTRIBUTE, &attr); g_return_val_if_fail (retval, FALSE); } retval = ibus_message_iter_close_container (iter, &array_iter); g_return_val_if_fail (retval, FALSE); return TRUE; }
static void _serialize_cb (GQuark key, GValue *value, IBusMessageIter *iter) { IBusMessageIter dict_entry; gboolean retval; const gchar *name; retval = ibus_message_iter_open_container (iter, IBUS_TYPE_DICT_ENTRY, NULL, &dict_entry); g_return_if_fail (retval); name = g_quark_to_string (key); retval = ibus_message_iter_append (&dict_entry, G_TYPE_STRING, &name); g_return_if_fail (retval); retval = _g_value_serialize (value, &dict_entry); g_return_if_fail (retval); retval = ibus_message_iter_close_container (iter, &dict_entry); g_return_if_fail (retval); }
static gboolean _g_value_serialize (GValue *value, IBusMessageIter *iter) { gboolean retval; GType type; type = G_VALUE_TYPE (value); g_return_val_if_fail (type != G_TYPE_INVALID, FALSE); if (g_type_is_a (type, IBUS_TYPE_SERIALIZABLE)) { IBusSerializable *object; object = IBUS_SERIALIZABLE (g_value_get_object (value)); retval = ibus_message_iter_append (iter, type, &object); g_return_val_if_fail (retval, FALSE); return TRUE; } typedef const gchar *gstring; switch (type) { #define CASE_ENTRY(TYPE, _type, signature) \ case G_TYPE_##TYPE: \ { \ g##_type v; \ IBusMessageIter variant_iter; \ \ retval = ibus_message_iter_open_container (iter, \ IBUS_TYPE_VARIANT, \ signature, \ &variant_iter); \ g_return_val_if_fail (retval, FALSE); \ \ v = g_value_get_##_type (value); \ retval = ibus_message_iter_append (&variant_iter, \ G_TYPE_##TYPE, \ &v); \ g_return_val_if_fail (retval, FALSE); \ \ retval = ibus_message_iter_close_container (iter, &variant_iter); \ g_return_val_if_fail (retval, FALSE); \ \ return TRUE; \ } CASE_ENTRY(CHAR, char, "y"); CASE_ENTRY(BOOLEAN, boolean, "b"); CASE_ENTRY(INT, int, "i"); CASE_ENTRY(UINT, uint, "u"); CASE_ENTRY(INT64, int64, "x"); CASE_ENTRY(UINT64, uint64, "t"); CASE_ENTRY(FLOAT, float, "d"); CASE_ENTRY(DOUBLE, double, "d"); CASE_ENTRY(STRING, string, "s"); #undef CASE_ENTRY } g_return_val_if_reached (FALSE); }
static gboolean ibus_observed_path_serialize (IBusObservedPath *path, IBusMessageIter *iter) { gboolean retval; retval = parent_class->serialize ((IBusSerializable *)path, iter); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &(path->path)); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_LONG, &(path->mtime)); g_return_val_if_fail (retval, FALSE); return TRUE; }
static gboolean ibus_text_serialize (IBusText *text, IBusMessageIter *iter) { gboolean retval; retval = parent_class->serialize ((IBusSerializable *)text, iter); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &text->text); g_return_val_if_fail (retval, FALSE); if (text->attrs == NULL) text->attrs = ibus_attr_list_new (); retval = ibus_message_iter_append (iter, IBUS_TYPE_ATTR_LIST, &text->attrs); g_return_val_if_fail (retval, FALSE); return TRUE; }
static gboolean ibus_factory_info_serialize (IBusFactoryInfo *info, IBusMessageIter *iter) { gboolean retval; retval = factory_info_parent_class->serialize ((IBusSerializable *)info, iter); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, IBUS_TYPE_OBJECT_PATH, &info->path); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &info->name); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &info->lang); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &info->icon); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &info->authors); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &info->credits); g_return_val_if_fail (retval, FALSE); return TRUE; }
gboolean ibus_property_serialize (IBusProperty *prop, IBusMessageIter *iter) { gboolean retval; retval = IBUS_SERIALIZABLE_CLASS (ibus_property_parent_class)->serialize ((IBusSerializable *) prop, iter); g_return_val_if_fail (retval, FALSE); g_return_val_if_fail (IBUS_IS_PROPERTY (prop), FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &prop->key); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_UINT, &prop->type); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, IBUS_TYPE_TEXT, &prop->label); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_STRING, &prop->icon); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, IBUS_TYPE_TEXT, &prop->tooltip); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_BOOLEAN, &prop->sensitive); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_BOOLEAN, &prop->visible); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, G_TYPE_UINT, &prop->state); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_append (iter, IBUS_TYPE_PROP_LIST, &prop->sub_props); g_return_val_if_fail (retval, FALSE); return TRUE; }
gboolean ibus_serializable_serialize (IBusSerializable *object, IBusMessageIter *iter) { g_return_val_if_fail (IBUS_IS_SERIALIZABLE (object), FALSE); g_return_val_if_fail (iter != NULL, FALSE); IBusMessageIter variant_iter; IBusMessageIter sub_iter; gboolean retval; gchar *signature; signature = g_strdup_printf ("(s%s)", IBUS_SERIALIZABLE_GET_CLASS (object)->signature->str); retval = ibus_message_iter_open_container (iter, IBUS_TYPE_VARIANT, signature, &variant_iter); g_free (signature); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_open_container (&variant_iter, IBUS_TYPE_STRUCT, NULL, &sub_iter); g_return_val_if_fail (retval, FALSE); const gchar *type_name = g_type_name (G_OBJECT_TYPE (object)); g_return_val_if_fail (type_name != NULL, FALSE); retval = ibus_message_iter_append (&sub_iter, G_TYPE_STRING, &type_name); g_return_val_if_fail (retval, FALSE); retval = IBUS_SERIALIZABLE_GET_CLASS (object)->serialize (object, &sub_iter); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_close_container (&variant_iter, &sub_iter); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_close_container (iter, &variant_iter); g_return_val_if_fail (retval, FALSE); return TRUE; }
gboolean ibus_message_append_args_valist (IBusMessage *message, GType first_arg_type, va_list va_args) { GType type; gboolean retval; IBusMessageIter iter; ibus_message_iter_init_append (message, &iter); type = first_arg_type; while (type != G_TYPE_INVALID) { gpointer value = va_arg (va_args, gpointer); retval = ibus_message_iter_append (&iter, type, value); type = va_arg (va_args, GType); g_return_val_if_fail (retval, FALSE); } return TRUE; }
gboolean ibus_message_iter_copy_data (IBusMessageIter *dst, IBusMessageIter *src) { GType type; gboolean retval; type = ibus_message_iter_get_arg_type (src); g_return_val_if_fail (type != G_TYPE_INVALID, FALSE); if (gtype_is_basic (type)) { gchar data[16]; ibus_message_iter_get_basic (src, data); retval = ibus_message_iter_append (dst, type, data); g_return_val_if_fail (retval, FALSE); return TRUE; } if (type == IBUS_TYPE_VARIANT) { IBusMessageIter subdst, subsrc; gchar *signature; retval = ibus_message_iter_recurse (src, IBUS_TYPE_VARIANT, &subsrc); g_return_val_if_fail (retval, FALSE); signature = dbus_message_iter_get_signature (&subsrc); g_return_val_if_fail (signature != NULL, FALSE); retval = ibus_message_iter_open_container (dst, IBUS_TYPE_VARIANT, signature, &subdst); dbus_free (signature); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_copy_data (&subdst, &subsrc); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_close_container (dst, &subdst); g_return_val_if_fail (retval, FALSE); return TRUE; } else if (type == IBUS_TYPE_ARRAY) { IBusMessageIter subdst, subsrc; gchar *signature; retval = ibus_message_iter_recurse (src, IBUS_TYPE_ARRAY, &subsrc); g_return_val_if_fail (retval, FALSE); signature = dbus_message_iter_get_signature (src); g_return_val_if_fail (signature != NULL, FALSE); retval = ibus_message_iter_open_container (dst, IBUS_TYPE_ARRAY, signature + 1, &subdst); dbus_free (signature); g_return_val_if_fail (retval, FALSE); while (ibus_message_iter_get_arg_type (&subsrc) != G_TYPE_INVALID) { retval = ibus_message_iter_copy_data (&subdst, &subsrc); g_return_val_if_fail (retval, FALSE); ibus_message_iter_next (&subsrc); } retval = ibus_message_iter_close_container (dst, &subdst); g_return_val_if_fail (retval, FALSE); return TRUE; } else if (type == IBUS_TYPE_STRUCT) { IBusMessageIter subdst, subsrc; retval = ibus_message_iter_recurse (src, IBUS_TYPE_STRUCT, &subsrc); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_open_container (dst, IBUS_TYPE_STRUCT, NULL, &subdst); g_return_val_if_fail (retval, FALSE); while (ibus_message_iter_get_arg_type (&subsrc) != G_TYPE_INVALID) { retval = ibus_message_iter_copy_data (&subdst, &subsrc); ibus_message_iter_next (&subsrc); g_return_val_if_fail (retval, FALSE); } retval = ibus_message_iter_close_container (dst, &subdst); g_return_val_if_fail (retval, FALSE); return TRUE; } else if (type == IBUS_TYPE_DICT_ENTRY) { IBusMessageIter subdst, subsrc; retval = ibus_message_iter_recurse (src, IBUS_TYPE_DICT_ENTRY, &subsrc); g_return_val_if_fail (retval, FALSE); retval = ibus_message_iter_open_container (dst, IBUS_TYPE_DICT_ENTRY, NULL, &subdst); g_return_val_if_fail (retval, FALSE); /* copy key */ retval = ibus_message_iter_copy_data (&subdst, &subsrc); g_return_val_if_fail (retval, FALSE); ibus_message_iter_next (&subsrc); /* copy value */ retval = ibus_message_iter_copy_data (&subdst, &subsrc); g_return_val_if_fail (retval, FALSE); ibus_message_iter_next (&subsrc); retval = ibus_message_iter_close_container (dst, &subdst); g_return_val_if_fail (retval, FALSE); return TRUE; } return FALSE; }