It looks like there is a problem connecting non-static methods to DBus signals. The attached code compiles well but produce critical warnings on DBus events. The static handler works well, but the instance-method-handler produce following warning:
** (process:15681): CRITICAL **: test_method_handler: assertion `IS_TEST (self)' failed
The instance-method-handler has following signature (in C):
static void test_method_handler (Test* self, DBusGProxy* sender, const char* id);
But will be called as test_method_handler(DBusGProxy* sender, const char* id, Test* self) I have no idea of dbus but in my opinion there is a function missing in the dbus-glib. dbus-glib only provides the function "dbus_g_proxy_connect_signal()" which simply calls "g_signal_connect_closure_by_id()". In my opinion DBusGProxy also needs "dbus_g_proxy_connect_signal_object()" to connect to non-static-methods of objects. Any ideas?!?
using GLib;
class Test: Object
{
private DBus.Connection conn;
private dynamic DBus.Object manager;
public static void static_handler(dynamic DBus.Object sender, string id){
message("static-handler: %s", id);
}
public void method_handler(dynamic DBus.Object sender, string id){
message("method-handler: %s", id);
}
construct{
conn = DBus.Bus.get(DBus.BusType.SYSTEM);
manager = conn.get_object("org.freedesktop.Hal",
"/org/freedesktop/Hal/Manager",
"org.freedesktop.Hal.Manager");
manager.DeviceAdded += static_handler;
manager.DeviceAdded += method_handler;
}
public static int main(string[] args)
{
MainLoop loop = new MainLoop(null, false);
var my_obj = new Test();
loop.run();
return 0;
}
}
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature