summaryrefslogtreecommitdiff
path: root/UnityCore
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2017-07-12 17:32:23 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2017-07-12 17:32:23 +0200
commitd88c22ef39bba3670c12b0396da00d79a8e959e2 (patch)
treee700b04b57eb38d380bc0cb2f280cb8e83e09ead /UnityCore
parente9c15e146396e2c9b6ba923fc4710685a759dfff (diff)
GLibSignal: change the methods signatures to return values
(bzr r4245.2.1)
Diffstat (limited to 'UnityCore')
-rw-r--r--UnityCore/GLibSignal-inl.h12
-rw-r--r--UnityCore/GLibSignal.cpp13
-rw-r--r--UnityCore/GLibSignal.h15
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 = "");