using namespace ARDOUR;
using namespace std;
+using namespace PBD;
bool StateManager::_allow_save = true;
-vector<StateManager::DeferredSave> StateManager::deferred;
+sigc::signal<void,const char*> StateManager::SaveAllowed;
StateManager::StateManager ()
{
}
void
-StateManager::set_allow_save (bool yn)
+StateManager::prohibit_save ()
{
- _allow_save = yn;
+ _allow_save = false;
+}
- if (yn) {
- for (vector<DeferredSave>::iterator x = deferred.begin(); x != deferred.end(); ++x) {
- (*x).first->save_state ((*x).second);
- }
- deferred.clear ();
+void
+StateManager::allow_save (const char* why, bool do_save)
+{
+ _allow_save = true;
+ if (do_save) {
+ SaveAllowed (why);
+ SaveAllowed.slots().erase (SaveAllowed.slots().begin(), SaveAllowed.slots().end());
}
}
void
StateManager::save_state (std::string why)
{
+ if (!should_save_state())
+ return;
+
if (!_allow_save) {
- deferred.push_back (DeferredSave (this, why));
+ SaveAllowed.connect (mem_fun (*this, &StateManager::save_state));
return;
}