diff qt/QGlobal.d @ 248:7664de4a55e5

Fixed #23. QtD_QObjectEntity is not created dynamically for shell classes any more. Class initialization is now performed by static constructors. When wrapping QObjects returned from functions, their run-time types are now taken into account. QObjects are allocated on GC heap, a doubly-linked list is used to prevent them from been collected (arguably a better solution than allocating on C heap and adding GC ranges) Minor changes (including unnecessary).
author maxter
date Thu, 20 Aug 2009 14:47:17 +0000
parents 27497bbe62a1
children 37eed70de029
line wrap: on
line diff
--- a/qt/QGlobal.d	Fri Jul 31 11:05:22 2009 +0000
+++ b/qt/QGlobal.d	Thu Aug 20 14:47:17 2009 +0000
@@ -20,6 +20,11 @@
                    core.memory;
 }
 
+T static_cast(T, U)(U obj)
+{
+    return cast(T)cast(void*)obj;
+}
+
 template QT_BEGIN_NAMESPACE() {
 }
 
@@ -35,13 +40,21 @@
 mixin QT_BEGIN_HEADER;
 mixin QT_BEGIN_NAMESPACE;
 
-extern(C) void __qtd_dummy() {}
+//TODO: this sucks
+extern(C) void qtd_dummy() {}
+// Defined in QObject.d
+extern(C) void qtd_delete_d_qobject(void* dPtr);
 
 version(cpp_shared)
 {
-    extern (C) void __qtd_qtd_core_initCallBacks(void* toUtf8, void* dummy);
+    extern (C) void qtd_core_initCallBacks(void* toUtf8, void* dummy);
     static this() {
-        __qtd_qtd_core_initCallBacks(&_d_toUtf8, &__qtd_dummy);
+        qtd_core_initCallBacks(&qtd_toUtf8, &qtd_dummy);
+    }
+
+    extern (C) void qtd_QObjectEntity_initCallBacks(void* del_d_obj);
+    static this() {
+        qtd_QObjectEntity_initCallBacks(&qtd_delete_d_qobject);
     }
 }
 
@@ -694,6 +707,7 @@
     const InterfaceCountImpl = TInterfaces.length;
 }
 
+/+
 scope class StackObject(C)
 {
     byte[InstanceSize!(C)] data;
@@ -719,6 +733,7 @@
         }
     }
 }
++/
 
 mixin QT_END_HEADER;