Mercurial > projects > qtd
diff qt/d2/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 | cf6a4cd0e3f2 |
line wrap: on
line diff
--- a/qt/d2/qt/Signal.d Sat Aug 22 12:50:58 2009 +0000 +++ b/qt/d2/qt/Signal.d Sun Aug 30 09:59:12 2009 +0000 @@ -71,6 +71,11 @@ memmove(a.ptr + dest, a.ptr + src, length * T.sizeof); } +enum SignalEventId +{ + firstSlotConnected, + lastSlotDisconnected +} public class SignalException : Exception { @@ -331,7 +336,7 @@ } } -public alias void delegate(int signalId) SignalEvent; +public alias void delegate(int signalId, SignalEventId event) SignalEvent; struct SignalConnections { @@ -444,12 +449,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; @@ -471,8 +473,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; } @@ -481,8 +483,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,