diff options
| author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2017-07-12 17:32:23 +0200 |
|---|---|---|
| committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2017-07-12 17:32:23 +0200 |
| commit | d88c22ef39bba3670c12b0396da00d79a8e959e2 (patch) | |
| tree | e700b04b57eb38d380bc0cb2f280cb8e83e09ead /UnityCore | |
| parent | e9c15e146396e2c9b6ba923fc4710685a759dfff (diff) | |
GLibSignal: change the methods signatures to return values
(bzr r4245.2.1)
Diffstat (limited to 'UnityCore')
| -rw-r--r-- | UnityCore/GLibSignal-inl.h | 12 | ||||
| -rw-r--r-- | UnityCore/GLibSignal.cpp | 13 | ||||
| -rw-r--r-- | UnityCore/GLibSignal.h | 15 |
3 files changed, 25 insertions, 15 deletions
diff --git a/UnityCore/GLibSignal-inl.h b/UnityCore/GLibSignal-inl.h index e1cab8dd4..e7d786ea6 100644 --- a/UnityCore/GLibSignal-inl.h +++ b/UnityCore/GLibSignal-inl.h @@ -34,11 +34,11 @@ Signal<R, G, Ts...>::Signal(G object, std::string const& signal_name, } template <typename R, typename G, typename... Ts> -void Signal<R, G, Ts...>::Connect(G object, std::string const& signal_name, +bool Signal<R, G, Ts...>::Connect(G object, std::string const& signal_name, SignalCallback const& callback) { if (!callback || !G_IS_OBJECT(object) || signal_name.empty()) - return; + return false; Disconnect(); @@ -47,6 +47,8 @@ void Signal<R, G, Ts...>::Connect(G object, std::string const& signal_name, callback_ = callback; connection_id_ = g_signal_connect(object_, signal_name.c_str(), G_CALLBACK(Callback), this); g_object_add_weak_pointer(object_, reinterpret_cast<gpointer*>(&object_)); + + return true; } template <typename R, typename G, typename... Ts> @@ -59,6 +61,12 @@ R Signal<R, G, Ts...>::Callback(G object, Ts... vs, Signal* self) return R(); } +template <typename R, typename G, typename... Ts> +SignalBase::Ptr SignalManager::Add(G object, std::string const& signal_name, typename Signal<R, G, Ts...>::SignalCallback const& callback) +{ + return Add(std::make_shared<Signal<R, G, Ts...>>(object, signal_name, callback)); +} + } } diff --git a/UnityCore/GLibSignal.cpp b/UnityCore/GLibSignal.cpp index 6173a09b4..f0949e84a 100644 --- a/UnityCore/GLibSignal.cpp +++ b/UnityCore/GLibSignal.cpp @@ -35,16 +35,20 @@ SignalBase::~SignalBase() Disconnect(); } -void SignalBase::Disconnect() +bool SignalBase::Disconnect() { + bool disconnected = false; + if (connection_id_ && G_IS_OBJECT(object_)) { g_signal_handler_disconnect(object_, connection_id_); g_object_remove_weak_pointer(object_, reinterpret_cast<gpointer*>(&object_)); + disconnected = true; } object_ = nullptr; connection_id_ = 0; + return disconnected; } GObject* SignalBase::object() const @@ -75,15 +79,16 @@ SignalManager::~SignalManager() // was too messy to try and write a copy constructor/operator that would steal // from "other" and make the new one the owner. Not only did it create // opportunity for random bugs, it also made the API bad. -void SignalManager::Add(SignalBase* signal) +SignalBase::Ptr SignalManager::Add(SignalBase* signal) { - Add(SignalBase::Ptr(signal)); + return Add(SignalBase::Ptr(signal)); } -void SignalManager::Add(SignalBase::Ptr const& signal) +SignalBase::Ptr SignalManager::Add(SignalBase::Ptr const& signal) { connections_.push_back(signal); g_object_weak_ref(signal->object(), (GWeakNotify)&OnObjectDestroyed, this); + return signal; } void SignalManager::OnObjectDestroyed(SignalManager* self, GObject* old_obj) diff --git a/UnityCore/GLibSignal.h b/UnityCore/GLibSignal.h index 392ff3382..46914bd00 100644 --- a/UnityCore/GLibSignal.h +++ b/UnityCore/GLibSignal.h @@ -39,7 +39,7 @@ public: virtual ~SignalBase(); - void Disconnect(); + bool Disconnect(); GObject* object() const; std::string const& name() const; @@ -71,9 +71,9 @@ public: #endif inline Signal() {}; - inline Signal(G object, std::string const& signal_name, SignalCallback const& callback); + inline Signal(G object, std::string const& signal_name, SignalCallback const&); - inline void Connect(G Object, std::string const& signal_name, SignalCallback const& callback); + inline bool Connect(G Object, std::string const& signal_name, SignalCallback const&); private: static R Callback(G Object, Ts... vs, Signal* self); @@ -86,13 +86,10 @@ class SignalManager : boost::noncopyable public: SignalManager(); ~SignalManager(); - void Add(SignalBase* signal); - void Add(SignalBase::Ptr const& signal); + SignalBase::Ptr Add(SignalBase* signal); + SignalBase::Ptr Add(SignalBase::Ptr const& signal); template <typename R, typename G, typename... Ts> - void Add(G object, std::string const& signal_name, typename Signal<R, G, Ts...>::SignalCallback const& callback) - { - Add(std::make_shared<Signal<R, G, Ts...>>(object, signal_name, callback)); - } + SignalBase::Ptr Add(G object, std::string const& signal_name, typename Signal<R, G, Ts...>::SignalCallback const&); void Disconnect(void* object, std::string const& signal_name = ""); |
