diff options
author | Robin Gareus <robin@gareus.org> | 2018-10-04 02:30:21 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2018-10-04 02:30:21 +0200 |
commit | b6b353d4528bbb7f352f9947015a3b7168825a9c (patch) | |
tree | 21d5f6a3fe04c18ee26165e3d2f4fdb53e1c41b3 /libs/ardour/control_protocol_manager.cc | |
parent | 9df6e334fc01ce024702c51e84a80193bea36bff (diff) |
Handle generic-midi bindings per session.
This allows to special-cases session-specific control-surface state.
e.g. midi-learn.
Only restore midi-learned, session-specific, bindings when loading a
session with generic-midi enabled.
Also dis/re-enable generic-midi resets midi-learned, but no other
session-independent settings.
This also handles the edge case:
1) load global config, generic-midi = ON, w/ bindings.
state is remembered as cpi->state
2) load session-condig, generic-midi = OFF, cpi->state is retained
3) user enables the surface, cpi->state from (1) is applied.
-> invalid bindings applied -> fail
Diffstat (limited to 'libs/ardour/control_protocol_manager.cc')
-rw-r--r-- | libs/ardour/control_protocol_manager.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc index c1c595ebb2..048ff3f7d5 100644 --- a/libs/ardour/control_protocol_manager.cc +++ b/libs/ardour/control_protocol_manager.cc @@ -452,7 +452,7 @@ ControlProtocolManager::cpi_by_name (string name) } int -ControlProtocolManager::set_state (const XMLNode& node, int /*version*/) +ControlProtocolManager::set_state (const XMLNode& node, int session_specific_state /* here: not version */) { XMLNodeList clist; XMLNodeConstIterator citer; @@ -483,6 +483,7 @@ ControlProtocolManager::set_state (const XMLNode& node, int /*version*/) if (active) { delete cpi->state; cpi->state = new XMLNode (**citer); + cpi->state->set_property (X_("session-state"), session_specific_state ? true : false); if (_session) { instantiate (*cpi); } else { @@ -492,6 +493,7 @@ ControlProtocolManager::set_state (const XMLNode& node, int /*version*/) if (!cpi->state) { cpi->state = new XMLNode (**citer); cpi->state->set_property (X_("active"), false); + cpi->state->set_property (X_("session-state"), session_specific_state ? true : false); } cpi->requested = false; if (_session) { |