From d338e6c003cca84733c7900be256a991790f7018 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Sat, 9 Jul 2011 23:57:32 +0200 Subject: Signal::connect now also accepts an already-constructed Slot This way we can use Commands as signal handlers out-of-the-box. --- src/FbTk/Signal.hh | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/FbTk/Signal.hh b/src/FbTk/Signal.hh index 31fd840..7de3893 100644 --- a/src/FbTk/Signal.hh +++ b/src/FbTk/Signal.hh @@ -143,6 +143,10 @@ public: new SlotImpl(functor) )); } + + SlotID connect(const RefCount > &slot) { + return SignalHolder::connect(slot); + } }; /// Specialization for two arguments. @@ -164,6 +168,10 @@ public: new SlotImpl(functor) )); } + + SlotID connect(const RefCount > &slot) { + return SignalHolder::connect(slot); + } }; /// Specialization for one argument. @@ -185,6 +193,10 @@ public: new SlotImpl(functor) )); } + + SlotID connect(const RefCount > &slot) { + return SignalHolder::connect(slot); + } }; /// Specialization for no arguments. @@ -206,6 +218,10 @@ public: new SlotImpl(functor) )); } + + SlotID connect(const RefCount > &slot) { + return SignalHolder::connect(slot); + } }; /** @@ -225,9 +241,17 @@ public: /// Starts tracking a signal. /// @return A tracking ID - template - TrackID join(Signal& sig, const Functor& functor) { - ValueType value = ValueType(&sig, sig.connect(functor)); + template + TrackID join(Signal &sig, const Functor &functor) { + return join(sig, RefCount >( + new SlotImpl(functor) + )); + } + + template + TrackID + join(Signal &sig, const RefCount > &slot) { + ValueType value = ValueType(&sig, sig.connect(slot)); std::pair ret = m_connections.insert(value); if ( !ret.second ) { // failed to insert this functor -- cgit v0.11.2