On Sat, 2009-01-10 at 00:49 +0100, Michael 'Mickey' Lauer wrote:
> Following up on that, apparantly the way we generate the signal
> registration 
> is only working for simple types. The following diff to the vala generated 
> code leads at least to the correct signature w/ dbus, so my signal callback 
> gets finally called:
> 
>  void _dynamic_Test1_connect (gpointer obj, const char * signal_name, 
> GCallback handler, gpointer data) {
>         dbus_g_object_register_marshaller 
> (g_cclosure_user_marshal_VOID__BOXED, G_TYPE_NONE, G_TYPE_HASH_TABLE, 
> G_TYPE_INVALID);
> -       dbus_g_proxy_add_signal (obj, "Test", G_TYPE_HASH_TABLE, 
> G_TYPE_INVALID);
> +       dbus_g_proxy_add_signal (obj, "Test", 
> dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), 
> G_TYPE_INVALID);
>         dbus_g_proxy_connect_signal (obj, signal_name, handler, data, NULL);
> 
> So apparantly we need to use dbus_g_type_get_map for a{sv} [and likewise, 
> I've 
> seen dbus_g_type_get_collection getting used for arrays].
> 
> How do we move from here?

This should now be fixed in trunk. The correct dbus-glib specific type
was already used for method calls but not for signal handlers. Can you
confirm that it works for you as well? I'm aiming for a 0.5.5 bug-fix
release soon.

There are some types that are known to not work in signal handlers such
as structs. The plan is to fix this when moving away from dbus-glib, not
feasible in a sane way before.

Jürg

_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to