X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fstateful.cc;h=8b8219f7e2243306f201f95257b035ec20b18cf0;hb=78b82b7ff2e28d53faae176776491404115ce02c;hp=7d6762919131fb2ee3eeff0549390e6082598247;hpb=4e6cdb4daa6fb5476854ff238e1cedb7909cd3d4;p=ardour.git diff --git a/libs/pbd/stateful.cc b/libs/pbd/stateful.cc index 7d67629191..8b8219f7e2 100644 --- a/libs/pbd/stateful.cc +++ b/libs/pbd/stateful.cc @@ -35,7 +35,7 @@ #include "pbd/xml++.h" #include "pbd/error.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; @@ -44,6 +44,8 @@ namespace PBD { int Stateful::current_state_version = 0; int Stateful::loading_state_version = 0; +Glib::Threads::Private Stateful::_regenerate_xml_or_string_ids; + Stateful::Stateful () : _extra_xml (0) , _instant_xml (0) @@ -69,7 +71,7 @@ Stateful::add_extra_xml (XMLNode& node) _extra_xml = new XMLNode ("Extra"); } - _extra_xml->remove_nodes (node.name()); + _extra_xml->remove_nodes_and_delete (node.name()); _extra_xml->add_child_nocopy (node); } @@ -381,6 +383,12 @@ bool Stateful::set_id (const XMLNode& node) { const XMLProperty* prop; + bool* regen = _regenerate_xml_or_string_ids.get(); + + if (regen && *regen) { + reset_id (); + return true; + } if ((prop = node.property ("id")) != 0) { _id = prop->value (); @@ -399,7 +407,31 @@ Stateful::reset_id () void Stateful::set_id (const string& str) { - _id = str; + bool* regen = _regenerate_xml_or_string_ids.get(); + + if (regen && *regen) { + reset_id (); + } else { + _id = str; + } +} + +bool +Stateful::regenerate_xml_or_string_ids () const +{ + bool* regen = _regenerate_xml_or_string_ids.get(); + if (regen && *regen) { + return true; + } else { + return false; + } +} + +void +Stateful::set_regenerate_xml_and_string_ids_in_this_thread (bool yn) +{ + bool* val = new bool (yn); + _regenerate_xml_or_string_ids.set (val); } } // namespace PBD