diff --git a/libs/surfaces/mackie/gui.cc b/libs/surfaces/mackie/gui.cc index 0df0935f56..16f2d52bdd 100644 --- a/libs/surfaces/mackie/gui.cc +++ b/libs/surfaces/mackie/gui.cc @@ -532,6 +532,7 @@ MackieControlProtocolGUI::action_changed (const Glib::ustring &sPath, const Glib void MackieControlProtocolGUI::surface_combo_changed () { + _cp.not_session_load(); _cp.set_device (_surface_combo.get_active_text()); /* update ipMIDI field */ diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 34feabfbb8..b3fe26c144 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -110,6 +110,7 @@ MackieControlProtocol::MackieControlProtocol (Session& session) , _initialized (false) , _surfaces_state (0) , _surfaces_version (0) + , _session_load (true) { DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n"); diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index 170f1e0f26..8043f49c08 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -209,6 +209,9 @@ class MackieControlProtocol int16_t ipmidi_base() const { return _ipmidi_base; } void set_ipmidi_base (int16_t); + bool session_load () { return _session_load; } + void not_session_load () { _session_load = false; } + void midi_connectivity_established (); protected: @@ -298,8 +301,9 @@ class MackieControlProtocol bool _metering_active; bool _initialized; ARDOUR::RouteNotificationList _last_selected_routes; - XMLNode* _surfaces_state; - int _surfaces_version; + XMLNode* _surfaces_state; + int _surfaces_version; + bool _session_load; boost::shared_ptr _master_surface; struct ipMIDIHandler { diff --git a/libs/surfaces/mackie/surface_port.cc b/libs/surfaces/mackie/surface_port.cc index e972ada8ab..9694d7f08c 100644 --- a/libs/surfaces/mackie/surface_port.cc +++ b/libs/surfaces/mackie/surface_port.cc @@ -120,19 +120,22 @@ SurfacePort::set_state (const XMLNode& node, int version) return 0; } // the rest should not be run if the device-name changes outside of a session load. - XMLNode* child; + if ( _surface->mcp().session_load()) { - if ((child = node.child (X_("Input"))) != 0) { - XMLNode* portnode = child->child (Port::state_node_name.c_str()); - if (portnode) { - _async_in->set_state (*portnode, version); + XMLNode* child; + + if ((child = node.child (X_("Input"))) != 0) { + XMLNode* portnode = child->child (Port::state_node_name.c_str()); + if (portnode) { + _async_in->set_state (*portnode, version); + } } - } - if ((child = node.child (X_("Output"))) != 0) { - XMLNode* portnode = child->child (Port::state_node_name.c_str()); - if (portnode) { - _async_out->set_state (*portnode, version); + if ((child = node.child (X_("Output"))) != 0) { + XMLNode* portnode = child->child (Port::state_node_name.c_str()); + if (portnode) { + _async_out->set_state (*portnode, version); + } } }