summaryrefslogtreecommitdiff
path: root/glib/glibmm/signalproxy.cc
diff options
context:
space:
mode:
authorMarcin Kolny <marcin.kolny@gmail.com>2015-08-08 14:45:12 +0200
committerMarcin Kolny <marcin.kolny@gmail.com>2015-08-08 14:45:59 +0200
commit0d5f63b18f5766760cf39e82ee11482984e0a938 (patch)
treee3f74b9b37e7618c92840024077dff43e6d08f0d /glib/glibmm/signalproxy.cc
parentdce7a844e48a582e42eb2b60eef5c1f2527540ac (diff)
parentd94115843f38967b5e883f5f7d8057882ae364cb (diff)
downloadglibmm-gir-gmmproc.tar.gz
Merge branch 'master' into glibmm-gir-gmmprocglibmm-gir-gmmproc
Diffstat (limited to 'glib/glibmm/signalproxy.cc')
-rw-r--r--glib/glibmm/signalproxy.cc43
1 files changed, 38 insertions, 5 deletions
diff --git a/glib/glibmm/signalproxy.cc b/glib/glibmm/signalproxy.cc
index e218ba9a..41ee5f70 100644
--- a/glib/glibmm/signalproxy.cc
+++ b/glib/glibmm/signalproxy.cc
@@ -1,7 +1,3 @@
-// -*- c++ -*-
-
-/* $Id$ */
-
/* signalproxy.cc
*
* Copyright (C) 2002 The gtkmm Development Team
@@ -101,5 +97,42 @@ void SignalProxyNormal::slot0_void_callback(GObject* self, void* data)
}
}
-} // namespace Glib
+// SignalProxyDetailed implementation:
+
+SignalProxyDetailed::SignalProxyDetailed(Glib::ObjectBase* obj,
+ const SignalProxyInfo* info, const Glib::ustring& detail_name)
+:
+ SignalProxyBase (obj),
+ info_ (info),
+ detailed_name_ (Glib::ustring(info->signal_name) +
+ (detail_name.empty() ? Glib::ustring() : ("::" + detail_name)))
+{}
+
+SignalProxyDetailed::~SignalProxyDetailed()
+{}
+
+sigc::slot_base&
+SignalProxyDetailed::connect_impl_(bool notify, const sigc::slot_base& slot, bool after)
+{
+ // create a proxy to hold our connection info
+ SignalProxyConnectionNode *const pConnectionNode =
+ new SignalProxyConnectionNode(slot, obj_->gobj());
+
+ // connect it to glib
+ // pConnectionNode will be passed in the data argument to the callback.
+ pConnectionNode->connection_id_ = g_signal_connect_data(
+ obj_->gobj(), detailed_name_.c_str(),
+ notify ? info_->notify_callback : info_->callback,
+ pConnectionNode, &SignalProxyConnectionNode::destroy_notify_handler,
+ static_cast<GConnectFlags>(after ? G_CONNECT_AFTER : 0));
+
+ return pConnectionNode->slot_;
+}
+
+void SignalProxyDetailed::emission_stop()
+{
+ g_signal_stop_emission_by_name(obj_->gobj(), detailed_name_.c_str());
+}
+
+} // namespace Glib