diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-17 18:24:23 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-12-17 18:24:23 +0000 |
commit | f6fdd8dcbf41f864e9f0cc32dabe81fe3533ddfe (patch) | |
tree | 5214c580b9e6c17a499fa587660dbf949e892bf2 /libs/pbd/controllable.cc | |
parent | da762129f19c28aff64f833b6ec09fba946faef6 (diff) |
switch to using boost::signals2 instead of sigc++, at least for libardour. not finished yet, but compiles, loads sessions, records and can close a session without a crash
git-svn-id: svn://localhost/ardour2/branches/3.0@6372 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/controllable.cc')
-rw-r--r-- | libs/pbd/controllable.cc | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/libs/pbd/controllable.cc b/libs/pbd/controllable.cc index 35f7605541..369e2bd545 100644 --- a/libs/pbd/controllable.cc +++ b/libs/pbd/controllable.cc @@ -26,11 +26,11 @@ using namespace PBD; using namespace std; -sigc::signal<void,Controllable*> Controllable::Destroyed; -sigc::signal<bool,Controllable*> Controllable::StartLearning; -sigc::signal<void,Controllable*> Controllable::StopLearning; -sigc::signal<void,Controllable*,int,int> Controllable::CreateBinding; -sigc::signal<void,Controllable*> Controllable::DeleteBinding; +boost::signals2::signal<void(Controllable*)> Controllable::Destroyed; +boost::signals2::signal<bool(Controllable*)> Controllable::StartLearning; +boost::signals2::signal<void(Controllable*)> Controllable::StopLearning; +boost::signals2::signal<void(Controllable*,int,int)> Controllable::CreateBinding; +boost::signals2::signal<void(Controllable*)> Controllable::DeleteBinding; Glib::StaticRWLock Controllable::registry_lock = GLIBMM_STATIC_RW_LOCK_INIT; Controllable::Controllables Controllable::registry; @@ -41,45 +41,47 @@ Controllable::Controllable (const string& name, const string& uri) , _uri (uri) , _touching (false) { - add (); + add (*this); } void -Controllable::add () +Controllable::add (Controllable& ctl) { + using namespace boost; + Glib::RWLock::WriterLock lm (registry_lock); - registry.insert (this); + registry.insert (&ctl); - if (!_uri.empty()) { + if (!ctl.uri().empty()) { pair<string,Controllable*> newpair; - newpair.first = _uri; - newpair.second = this; + newpair.first = ctl.uri(); + newpair.second = &ctl; registry_by_uri.insert (newpair); } - this->GoingAway.connect (mem_fun (this, &Controllable::remove)); + /* Controllable::remove() is static - no need to manage this connection */ + + ctl.GoingAway.connect (boost::bind (&Controllable::remove, ref (ctl))); } void -Controllable::remove () +Controllable::remove (Controllable& ctl) { Glib::RWLock::WriterLock lm (registry_lock); for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) { - if ((*i) == this) { + if ((*i) == &ctl) { registry.erase (i); break; } } - if (!_uri.empty()) { - ControllablesByURI::iterator i = registry_by_uri.find (_uri); + if (!ctl.uri().empty()) { + ControllablesByURI::iterator i = registry_by_uri.find (ctl.uri()); if (i != registry_by_uri.end()) { registry_by_uri.erase (i); } } - - } void |