diff options
author | Marcin Kolny <marcin.kolny@gmail.com> | 2015-08-08 14:45:12 +0200 |
---|---|---|
committer | Marcin Kolny <marcin.kolny@gmail.com> | 2015-08-08 14:45:59 +0200 |
commit | 0d5f63b18f5766760cf39e82ee11482984e0a938 (patch) | |
tree | e3f74b9b37e7618c92840024077dff43e6d08f0d /glib/glibmm/signalproxy.cc | |
parent | dce7a844e48a582e42eb2b60eef5c1f2527540ac (diff) | |
parent | d94115843f38967b5e883f5f7d8057882ae364cb (diff) | |
download | glibmm-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.cc | 43 |
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 |