diff options
author | Robin Gareus <robin@gareus.org> | 2016-09-21 03:45:57 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-09-21 03:45:57 +0200 |
commit | 1acfb11cb663dbda25ec1f9fa920008171559ad9 (patch) | |
tree | d1e064c47fded5afaf19774660fa36dc628c81b5 /libs/ardour/lv2_plugin.cc | |
parent | ad0aef7dce247ac69fc9c86554d0acbe6c3045bd (diff) |
add a static flag to force writing LV2 state
This is needed for save-as and archiving, LV2 state may not be saved
otherwise if lilv_state_equals() returns true.
Also if thestate is saved as part of save-as or archiving or
template, the state-version did increase.
Upcoming normal save will reference a plugin state that does not exist
in the current session bundle.
Diffstat (limited to 'libs/ardour/lv2_plugin.cc')
-rw-r--r-- | libs/ardour/lv2_plugin.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index 25ae65e17b..2d19ea9458 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -109,6 +109,8 @@ using namespace std; using namespace ARDOUR; using namespace PBD; +bool LV2Plugin::force_state_save = false; + class LV2World : boost::noncopyable { public: LV2World (); @@ -1248,7 +1250,7 @@ LV2Plugin::add_state(XMLNode* root) const 0, NULL); - if (!_plugin_state_dir.empty() + if (!_plugin_state_dir.empty() || force_state_save || !_impl->state || !lilv_state_equals(state, _impl->state)) { lilv_state_save(_world.world, @@ -1259,13 +1261,19 @@ LV2Plugin::add_state(XMLNode* root) const new_dir.c_str(), "state.ttl"); - if (_plugin_state_dir.empty()) { + if (force_state_save) { + // archive or save-as + lilv_state_free(state); + --_state_version; + } + else if (_plugin_state_dir.empty()) { // normal session save lilv_state_free(_impl->state); _impl->state = state; } else { // template save (dedicated state-dir) lilv_state_free(state); + --_state_version; } } else { // State is identical, decrement version and nuke directory |