From: Paul Davis Date: Mon, 8 May 2017 09:36:46 +0000 (+0100) Subject: when removing a Route from Session, remove it from CoreSelection and signal that... X-Git-Tag: 5.9~66 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=7d523dc43c78a6cbdd2668cb541f186f7ae8bdeb;p=ardour.git when removing a Route from Session, remove it from CoreSelection and signal that change if necessary --- diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 3cf24ba581..2d4f11b1dc 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3719,6 +3719,7 @@ void Session::remove_routes (boost::shared_ptr routes_to_remove) { bool mute_changed = false; + bool send_selected = false; { // RCU Writer scope PBD::Unwinder uw_flag (_route_deletion_in_progress, true); @@ -3727,6 +3728,10 @@ Session::remove_routes (boost::shared_ptr routes_to_remove) for (RouteList::iterator iter = routes_to_remove->begin(); iter != routes_to_remove->end(); ++iter) { + if (_selection->selected (*iter)) { + send_selected = true; + } + if (*iter == _master_out) { continue; } @@ -3824,19 +3829,27 @@ Session::remove_routes (boost::shared_ptr routes_to_remove) * and unregister ports from the backend */ + if (send_selected && !deletion_in_progress()) { + for (RouteList::iterator iter = routes_to_remove->begin(); iter != routes_to_remove->end(); ++iter) { + _selection->remove_stripable_by_id ((*iter)->id()); + } + PropertyChange so; + so.add (Properties::order); + if (send_selected) { + so.add (Properties::selected); + } + PresentationInfo::Change (so); + } + for (RouteList::iterator iter = routes_to_remove->begin(); iter != routes_to_remove->end(); ++iter) { cerr << "Drop references to " << (*iter)->name() << endl; (*iter)->drop_references (); } - if (_state_of_the_state & Deletion) { + if (deletion_in_progress()) { return; } - PropertyChange so; - so.add (Properties::selected); - so.add (Properties::order); - PresentationInfo::Change (PropertyChange (so)); /* save the new state of the world */