prevent crash during track-deletion (un-selecting deleted tracks)
This commit is contained in:
parent
33942e6d52
commit
9990da35d8
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user