summaryrefslogtreecommitdiff
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2012-07-16 03:04:04 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2012-07-16 03:04:04 +0200
commitc732f39b553542c25883d1190b7c658a9b2d6f58 (patch)
tree8dc3d0d653668413dcec8bb6fe94b9bafa6498ee
parentf4d29f813d1d5c2c1a12a72ebfd3b3f589a1db9d (diff)
GLibSignal: replace sigc::slot with std::function
(bzr r2501.1.2)
-rw-r--r--UnityCore/Filter.h2
-rw-r--r--UnityCore/GLibSignal-inl.h3
-rw-r--r--UnityCore/GLibSignal.h5
-rw-r--r--tests/test_glib_signals.cpp1
4 files changed, 7 insertions, 4 deletions
diff --git a/UnityCore/Filter.h b/UnityCore/Filter.h
index 213c50cc0..86c315c9f 100644
--- a/UnityCore/Filter.h
+++ b/UnityCore/Filter.h
@@ -24,7 +24,7 @@
#include <map>
#include <memory>
#include <NuxCore/Property.h>
-#include <sigc++/trackable.h>
+#include <sigc++/sigc++.h>
#include "GLibSignal.h"
#include "Variant.h"
diff --git a/UnityCore/GLibSignal-inl.h b/UnityCore/GLibSignal-inl.h
index 0f3e7a9b5..278462478 100644
--- a/UnityCore/GLibSignal-inl.h
+++ b/UnityCore/GLibSignal-inl.h
@@ -37,6 +37,9 @@ template <typename R, typename G, typename... Ts>
void 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;
+
object_ = reinterpret_cast<GObject*>(object);
name_ = signal_name;
callback_ = callback;
diff --git a/UnityCore/GLibSignal.h b/UnityCore/GLibSignal.h
index b498888bb..e31f052d2 100644
--- a/UnityCore/GLibSignal.h
+++ b/UnityCore/GLibSignal.h
@@ -26,7 +26,6 @@
#include <memory>
#include <boost/noncopyable.hpp>
#include <glib-object.h>
-#include <sigc++/sigc++.h>
namespace unity
{
@@ -61,14 +60,14 @@ public:
* workaround this issue using the trick below.
* See GCC bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35722 */
#if !defined(__GNUC__) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 7)
- typedef sigc::slot<R, G, Ts...> SignalCallback;
+ typedef std::function<R(G, Ts...)> SignalCallback;
#else
template<template <typename...> class T, typename... params>
struct expand_variadic {
typedef T<params...> type;
};
- typedef typename expand_variadic<sigc::slot, R, G, Ts...>::type SignalCallback;
+ typedef typename expand_variadic<std::function, R(G, Ts...)>::type SignalCallback;
#endif
inline Signal() {};
diff --git a/tests/test_glib_signals.cpp b/tests/test_glib_signals.cpp
index e3f0fa34c..19112a94a 100644
--- a/tests/test_glib_signals.cpp
+++ b/tests/test_glib_signals.cpp
@@ -1,4 +1,5 @@
#include <UnityCore/GLibSignal.h>
+#include <sigc++/sigc++.h>
#include <gtest/gtest.h>
#include "test_glib_signals_utils.h"