changeset 301:4d8481385c71 signals

windows fix
author eldar
date Tue, 08 Dec 2009 21:13:24 +0000
parents c2c70e501860
children 55ee4603365d
files generator/cppimplgenerator.cpp generator/dgenerator.cpp include/qtd_core.h
diffstat 3 files changed, 15 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/generator/cppimplgenerator.cpp	Sun Dec 06 22:21:22 2009 +0000
+++ b/generator/cppimplgenerator.cpp	Tue Dec 08 21:13:24 2009 +0000
@@ -505,13 +505,9 @@
                  "(pf" << function->marshalledName() << "_dispatch) virts[" << pos << "];" << endl;
         }
     }
-
     // D-side signal callbacks
-    AbstractMetaFunctionList signal_funcs = signalFunctions(java_class);
-    for(int i = 0; i < signal_funcs.size(); i++)
-        s << "    emit_callbacks_" << java_class->name() << "[" << i << "] = (EmitCallback)"
-             "sigs[" << i << "];" << endl;
-
+    if (java_class->isQObject())
+        s << "    qtd_" << java_class->name() << "_qt_metacall_dispatch = (QtMetacallCallback)sigs[0];" << endl;
     s << "}" << endl;
 }
 
@@ -1353,9 +1349,12 @@
       << "}" << endl << endl;
       */
 
-    s << "extern \"C\" int qtd_" << java_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject::Call _c, int _id, void **_a);" << endl << endl
-
-      << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl
+    if(cpp_shared)
+        s << "QtMetacallCallback qtd_" << java_class->name() << "_qt_metacall_dispatch;" << endl;
+    else
+        s << "extern \"C\" int qtd_" << java_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject::Call _c, int _id, void **_a);" << endl << endl;
+
+    s << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl
       << "{" << endl
       << "    return qtd_" << java_class->name() << "_qt_metacall_dispatch(this->dId, _c, _id, _a);" << endl
       << "}" << endl << endl
--- a/generator/dgenerator.cpp	Sun Dec 06 22:21:22 2009 +0000
+++ b/generator/dgenerator.cpp	Tue Dec 08 21:13:24 2009 +0000
@@ -2573,18 +2573,10 @@
                 initArgs = "virt_arr.ptr";
 
             if (d_class->isQObject()) {
-
-                // signals
-                AbstractMetaFunctionList signal_funcs = signalFunctions(d_class);
-                s << endl << INDENT << "void*[" << signal_funcs.size() << "] sign_arr;" << endl;
-                for(int i = 0; i < signal_funcs.size(); i++) {
-                    AbstractMetaFunction *signal = signal_funcs.at(i);
-                    s << INDENT << "sign_arr[" << i << "] = &" << signalExternName(d_class, signal) << "_handle;" << endl;
-                }
-                if(signal_funcs.size() == 0)
-                    initArgs += ", null";
-                else
-                    initArgs += ", sign_arr.ptr";
+                // qt_metacalls
+                s << endl << INDENT << "void*[1] sign_arr;" << endl;
+                s << INDENT << "sign_arr[0] = &qtd_" << d_class->name() << "_qt_metacall_dispatch;" << endl;
+                initArgs += ", sign_arr.ptr";
             }
 
             s << INDENT << "qtd_" << d_class->name() << QString("_initCallBacks(%1);").arg(initArgs) << endl;
--- a/include/qtd_core.h	Sun Dec 06 22:21:22 2009 +0000
+++ b/include/qtd_core.h	Tue Dec 08 21:13:24 2009 +0000
@@ -81,6 +81,9 @@
 extern "C" QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia);
 extern "C" QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index);
 
+extern "C" typedef void (*EmitCallback)(void*, void**);
+extern "C" typedef int (*QtMetacallCallback)(void *d_entity, QMetaObject::Call _c, int _id, void **_a);
+
 template <class T>
 void call_destructor(T *a)
 {