diff options
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/route_processor_selection.cc | 15 | ||||
-rw-r--r-- | gtk2_ardour/route_processor_selection.h | 2 |
3 files changed, 18 insertions, 6 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 803d3e0774..3d7adc5584 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -82,6 +82,7 @@ #include "item_counts.h" #include "keyboard.h" #include "midi_region_view.h" +#include "mixer_ui.h" #include "mixer_strip.h" #include "mouse_cursors.h" #include "normalize_dialog.h" @@ -7360,6 +7361,9 @@ edit your ardour.rc file to set the\n\ return; } + + Mixer_UI::instance()->selection().block_routes_changed (true); + selection->block_tracks_changed (true); { DisplaySuspender ds; boost::shared_ptr<RouteList> rl (new RouteList); @@ -7372,6 +7376,9 @@ edit your ardour.rc file to set the\n\ * destructors are called, * diskstream drops references, save_state is called (again for every track) */ + selection->block_tracks_changed (false); + Mixer_UI::instance()->selection().block_routes_changed (false); + selection->TracksChanged (); /* EMIT SIGNAL */ } void diff --git a/gtk2_ardour/route_processor_selection.cc b/gtk2_ardour/route_processor_selection.cc index 729032e637..7428267b50 100644 --- a/gtk2_ardour/route_processor_selection.cc +++ b/gtk2_ardour/route_processor_selection.cc @@ -32,8 +32,8 @@ using namespace std; using namespace ARDOUR; using namespace PBD; +unsigned int RouteProcessorSelection::_no_route_change_signal = 0; RouteProcessorSelection::RouteProcessorSelection() - : _no_route_change_signal (false) { } @@ -76,7 +76,7 @@ RouteProcessorSelection::clear_routes () } axes.clear (); drop_connections (); - if (!_no_route_change_signal) { + if (0 == _no_route_change_signal) { RoutesChanged (); } } @@ -110,7 +110,7 @@ RouteProcessorSelection::add (AxisView* r) ms->CatchDeletion.connect (*this, invalidator (*this), boost::bind (&RouteProcessorSelection::remove, this, _1), gui_context()); } - if (!_no_route_change_signal) { + if (0 == _no_route_change_signal) { RoutesChanged(); } } @@ -125,7 +125,7 @@ RouteProcessorSelection::remove (AxisView* r) if ((i = find (axes.begin(), axes.end(), r)) != axes.end()) { (*i)->set_selected (false); axes.erase (i); - if (!_no_route_change_signal) { + if (0 == _no_route_change_signal) { RoutesChanged (); } } @@ -153,5 +153,10 @@ RouteProcessorSelection::empty () void RouteProcessorSelection::block_routes_changed (bool yn) { - _no_route_change_signal = yn; + if (yn) { + ++_no_route_change_signal; + } else { + assert (_no_route_change_signal > 0); + --_no_route_change_signal; + } } diff --git a/gtk2_ardour/route_processor_selection.h b/gtk2_ardour/route_processor_selection.h index 6c037d7bd9..a4d6f0f1a4 100644 --- a/gtk2_ardour/route_processor_selection.h +++ b/gtk2_ardour/route_processor_selection.h @@ -58,7 +58,7 @@ class RouteProcessorSelection : public PBD::ScopedConnectionList, public sigc::t private: void removed (AxisView*); - bool _no_route_change_signal; + static unsigned int _no_route_change_signal; }; |