/*
- Copyright (C) 2000-2007 Paul Davis
+ Copyright (C) 2000-2007 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
PBD::Signal3<void,Controllable*,int,int> Controllable::CreateBinding;
PBD::Signal1<void,Controllable*> Controllable::DeleteBinding;
-Glib::StaticRWLock Controllable::registry_lock = GLIBMM_STATIC_RW_LOCK_INIT;
+Glib::Threads::RWLock Controllable::registry_lock;
Controllable::Controllables Controllable::registry;
-PBD::ScopedConnectionList registry_connections;
+PBD::ScopedConnectionList* registry_connections = 0;
const std::string Controllable::xml_node_name = X_("Controllable");
Controllable::Controllable (const string& name, Flag f)
{
using namespace boost;
- Glib::RWLock::WriterLock lm (registry_lock);
+ Glib::Threads::RWLock::WriterLock lm (registry_lock);
registry.insert (&ctl);
+ if (!registry_connections) {
+ registry_connections = new ScopedConnectionList;
+ }
+
/* Controllable::remove() is static - no need to manage this connection */
- ctl.DropReferences.connect_same_thread (registry_connections, boost::bind (&Controllable::remove, &ctl));
+ ctl.DropReferences.connect_same_thread (*registry_connections, boost::bind (&Controllable::remove, &ctl));
}
void
Controllable::remove (Controllable* ctl)
{
- Glib::RWLock::WriterLock lm (registry_lock);
+ Glib::Threads::RWLock::WriterLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i) == ctl) {
Controllable*
Controllable::by_id (const ID& id)
{
- Glib::RWLock::ReaderLock lm (registry_lock);
+ Glib::Threads::RWLock::ReaderLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->id() == id) {
Controllable*
Controllable::by_name (const string& str)
{
- Glib::RWLock::ReaderLock lm (registry_lock);
+ Glib::Threads::RWLock::ReaderLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->_name == str) {
Controllable::get_state ()
{
XMLNode* node = new XMLNode (xml_node_name);
- LocaleGuard lg (X_("POSIX"));
+ LocaleGuard lg (X_("C"));
char buf[64];
node->add_property (X_("name"), _name); // not reloaded from XML state, just there to look at
int
Controllable::set_state (const XMLNode& node, int /*version*/)
{
- LocaleGuard lg (X_("POSIX"));
+ LocaleGuard lg (X_("C"));
const XMLProperty* prop;
Stateful::save_extra_xml (node);
if (sscanf (prop->value().c_str(), "%f", &val) == 1) {
set_value (val);
- }
+ }
}
return 0;