Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}