diff generator/dgenerator.cpp @ 303:98b211f3ee34 signals

fix for #19
author eldar_ins@eldar-laptop
date Sat, 12 Dec 2009 16:01:55 +0500
parents 55ee4603365d
children 04b52676b45f
line wrap: on
line diff
--- a/generator/dgenerator.cpp	Sat Dec 12 03:22:54 2009 +0500
+++ b/generator/dgenerator.cpp	Sat Dec 12 16:01:55 2009 +0500
@@ -2573,9 +2573,10 @@
                 initArgs = "virt_arr.ptr";
 
             if (d_class->isQObject()) {
-                // qt_metacalls
-                s << endl << INDENT << "void*[1] sign_arr;" << endl;
+                // qt_metacall, metaObject
+                s << endl << INDENT << "void*[2] sign_arr;" << endl;
                 s << INDENT << "sign_arr[0] = &qtd_" << d_class->name() << "_qt_metacall_dispatch;" << endl;
+                s << INDENT << "sign_arr[1] = &qtd_" << d_class->name() << "_metaObject_dispatch;" << endl;
                 initArgs += ", sign_arr.ptr";
             }
 
@@ -2682,8 +2683,13 @@
       << "private extern(C) int qtd_" << d_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject.Call _c, int _id, void **_a) {"
       << "    auto d_object = cast(" << d_class->name() << ") d_entity;"
       << "    return d_object.qt_metacall(_c, _id, _a);"
+      << "}" << endl << endl
+
+      << "private extern(C) void* qtd_" << d_class->name() << "_metaObject_dispatch(void *d_entity) {"
+      << "    auto d_object = cast(" << d_class->name() << ") d_entity;"
+      << "    return d_object.metaObject().nativeId();"
       << "}" << endl << endl;
-}
+  }
 
 void writeMetaMethodSignatures(QTextStream &s, const QString &var_name, AbstractMetaFunctionList meta_funcs)
 {