13
0

prevent crash during track-deletion (un-selecting deleted tracks)

This commit is contained in:
Robin Gareus 2016-11-10 23:04:12 +01:00
parent 33942e6d52
commit 9990da35d8
3 changed files with 18 additions and 6 deletions

View File

@ -82,6 +82,7 @@
#include "item_counts.h" #include "item_counts.h"
#include "keyboard.h" #include "keyboard.h"
#include "midi_region_view.h" #include "midi_region_view.h"
#include "mixer_ui.h"
#include "mixer_strip.h" #include "mixer_strip.h"
#include "mouse_cursors.h" #include "mouse_cursors.h"
#include "normalize_dialog.h" #include "normalize_dialog.h"
@ -7360,6 +7361,9 @@ edit your ardour.rc file to set the\n\
return; return;
} }
Mixer_UI::instance()->selection().block_routes_changed (true);
selection->block_tracks_changed (true);
{ {
DisplaySuspender ds; DisplaySuspender ds;
boost::shared_ptr<RouteList> rl (new RouteList); boost::shared_ptr<RouteList> rl (new RouteList);
@ -7372,6 +7376,9 @@ edit your ardour.rc file to set the\n\
* destructors are called, * destructors are called,
* diskstream drops references, save_state is called (again for every track) * 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 void

View File

@ -32,8 +32,8 @@ using namespace std;
using namespace ARDOUR; using namespace ARDOUR;
using namespace PBD; using namespace PBD;
unsigned int RouteProcessorSelection::_no_route_change_signal = 0;
RouteProcessorSelection::RouteProcessorSelection() RouteProcessorSelection::RouteProcessorSelection()
: _no_route_change_signal (false)
{ {
} }
@ -76,7 +76,7 @@ RouteProcessorSelection::clear_routes ()
} }
axes.clear (); axes.clear ();
drop_connections (); drop_connections ();
if (!_no_route_change_signal) { if (0 == _no_route_change_signal) {
RoutesChanged (); RoutesChanged ();
} }
} }
@ -110,7 +110,7 @@ RouteProcessorSelection::add (AxisView* r)
ms->CatchDeletion.connect (*this, invalidator (*this), boost::bind (&RouteProcessorSelection::remove, this, _1), gui_context()); 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(); RoutesChanged();
} }
} }
@ -125,7 +125,7 @@ RouteProcessorSelection::remove (AxisView* r)
if ((i = find (axes.begin(), axes.end(), r)) != axes.end()) { if ((i = find (axes.begin(), axes.end(), r)) != axes.end()) {
(*i)->set_selected (false); (*i)->set_selected (false);
axes.erase (i); axes.erase (i);
if (!_no_route_change_signal) { if (0 == _no_route_change_signal) {
RoutesChanged (); RoutesChanged ();
} }
} }
@ -153,5 +153,10 @@ RouteProcessorSelection::empty ()
void void
RouteProcessorSelection::block_routes_changed (bool yn) 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;
}
} }

View File

@ -58,7 +58,7 @@ class RouteProcessorSelection : public PBD::ScopedConnectionList, public sigc::t
private: private:
void removed (AxisView*); void removed (AxisView*);
bool _no_route_change_signal; static unsigned int _no_route_change_signal;
}; };