mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-10 07:26:32 +01:00
Persistent ctrl-surface state
Keep latest surface configuration, regardless if surface is active or being deactivated. Current state after de-activation is retained. Currently state loaded from a session overrides global state from global preferences, if the surface is marked active in the session. This is to allow midi-learn. generic-midi and session-specific midi-learn will require additional work.
This commit is contained in:
parent
be826f3635
commit
9df6e334fc
1 changed files with 3 additions and 8 deletions
|
|
@ -266,6 +266,7 @@ ControlProtocolManager::teardown (ControlProtocolInfo& cpi, bool lock_required)
|
|||
cpi.descriptor->destroy (cpi.descriptor, cpi.protocol);
|
||||
|
||||
if (lock_required) {
|
||||
/* the lock is required when the protocol is torn down by a user from the GUI. */
|
||||
Glib::Threads::RWLock::WriterLock lm (protocols_lock);
|
||||
list<ControlProtocol*>::iterator p = find (control_protocols.begin(), control_protocols.end(), cpi.protocol);
|
||||
if (p != control_protocols.end()) {
|
||||
|
|
@ -284,14 +285,6 @@ ControlProtocolManager::teardown (ControlProtocolInfo& cpi, bool lock_required)
|
|||
|
||||
cpi.protocol = 0;
|
||||
|
||||
if (lock_required) {
|
||||
/* the lock is only required when the protocol is torn down from the GUI.
|
||||
* If a user disables a protocol, we take this as indicator to forget the
|
||||
* state.
|
||||
*/
|
||||
delete cpi.state;
|
||||
cpi.state = 0;
|
||||
}
|
||||
delete (Glib::Module*) cpi.descriptor->module;
|
||||
/* cpi->descriptor is now inaccessible since dlclose() or equivalent
|
||||
* has been performed, and the descriptor is (or could be) a static
|
||||
|
|
@ -525,6 +518,8 @@ ControlProtocolManager::get_state ()
|
|||
if ((*i)->protocol) {
|
||||
XMLNode& child_state ((*i)->protocol->get_state());
|
||||
child_state.set_property (X_("active"), true);
|
||||
delete ((*i)->state);
|
||||
(*i)->state = new XMLNode (child_state);
|
||||
root->add_child_nocopy (child_state);
|
||||
} else if ((*i)->state) {
|
||||
XMLNode* child_state = new XMLNode (*(*i)->state);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue