Mercurial > projects > qtd
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,