diff qt/d1/qt/Signal.d @ 253:073b9153ed8a

Rev. 264 done right. Problems: - classwizard segfaults on exit due to a bug in signals/slots or runtime. - hellogl doesn't compile with dmd2 due to a bug in the compiler backend
author maxter
date Sun, 30 Aug 2009 09:59:12 +0000
parents 7e589f525254
children 501128ac7a2c
line wrap: on
line diff
--- a/qt/d1/qt/Signal.d	Sat Aug 22 12:50:58 2009 +0000
+++ b/qt/d1/qt/Signal.d	Sun Aug 30 09:59:12 2009 +0000
@@ -100,6 +100,11 @@
         memmove(a.ptr + dest, a.ptr + src, length * T.sizeof);
 }
 
+enum SignalEventId
+{
+    firstSlotConnected,
+    lastSlotDisconnected
+}
 
 public class SignalException : Exception
 {
@@ -368,7 +373,7 @@
     }
 }
 
-public alias void delegate(int signalId) SignalEvent;
+public alias void delegate(int signalId, SignalEventId event) SignalEvent;
 
 struct SignalConnections
 {
@@ -481,12 +486,9 @@
     SignalConnections[] connections;
     Object owner;
     int blocked;
-
-    // Called after a slot has been connected to an empty signal
-    SignalEvent firstSlotConnected;
-    // Called after the last slot has been disconnected from a signal
-    SignalEvent lastSlotDisconnected;
-
+    
+    SignalEvent signalEvent;
+   
     alias SignalConnections.SlotType SlotType;
     alias SignalConnections.ReceiverType ReceiverType;
 
@@ -508,8 +510,8 @@
             connections.length = signalId + 1;
         auto slot = connections[signalId].addSlot!(slotListId)(SlotType!(slotListId)(receiver, invoker));
 
-        if (firstSlotConnected && connections[signalId].slotCount == 1)
-            firstSlotConnected(signalId);
+        if (signalEvent && connections[signalId].slotCount == 1)
+            signalEvent(signalId, SignalEventId.firstSlotConnected);
 
         return slot;
     }
@@ -518,8 +520,8 @@
     {
         connections[signalId].removeSlot!(slotListId)(slotId);
 
-        if (lastSlotDisconnected && !connections[signalId].slotCount)
-            lastSlotDisconnected(signalId);
+        if (signalEvent && !connections[signalId].slotCount)
+            signalEvent(signalId, SignalEventId.lastSlotDisconnected);
     }
 
     private SlotType!(slotListId)* addObjectSlot(int slotListId)(size_t signalId, Object obj, Dg receiver,