#include "pbd/xml++.h"
#include "pbd/error.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace std;
int Stateful::current_state_version = 0;
int Stateful::loading_state_version = 0;
+Glib::Threads::Private<bool> Stateful::_regenerate_xml_or_string_ids;
+
Stateful::Stateful ()
: _extra_xml (0)
, _instant_xml (0)
_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);
}
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 ();
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