X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsession_rtevents.cc;h=921a6348ebdd87cfc7fd507cf2700ceaf4203e56;hb=db6706429643d80e68a050daa015d17f36d5321b;hp=945e4220760848a17d154e9ac013a82f0e6bc707;hpb=401c7091c805b24b926acb2b393070d3a32628a6;p=ardour.git diff --git a/libs/ardour/session_rtevents.cc b/libs/ardour/session_rtevents.cc index 945e422076..921a6348eb 100644 --- a/libs/ardour/session_rtevents.cc +++ b/libs/ardour/session_rtevents.cc @@ -33,13 +33,13 @@ using namespace ARDOUR; using namespace Glib; SessionEvent* -Session::get_rt_event (boost::shared_ptr rl, bool yn, SessionEvent::RTeventCallback after, bool group_override, +Session::get_rt_event (boost::shared_ptr rl, bool yn, SessionEvent::RTeventCallback after, bool group_override, void (Session::*method) (boost::shared_ptr, bool, bool)) { SessionEvent* ev = new SessionEvent (SessionEvent::RealTimeOperation, SessionEvent::Add, SessionEvent::Immediate, 0, 0.0); ev->rt_slot = boost::bind (method, this, rl, yn, group_override); ev->rt_return = after; - ev->ui = UICallback::get_ui_for_thread (); + ev->event_loop = EventLoop::get_event_loop_for_thread (); return ev; } @@ -51,7 +51,7 @@ Session::set_solo (boost::shared_ptr rl, bool yn, SessionEvent::RTeve } void -Session::rt_set_solo (boost::shared_ptr rl, bool yn, bool group_override) +Session::rt_set_solo (boost::shared_ptr rl, bool yn, bool /* group_override */) { for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { if (!(*i)->is_hidden()) { @@ -100,7 +100,7 @@ Session::set_listen (boost::shared_ptr rl, bool yn, SessionEvent::RTe } void -Session::rt_set_listen (boost::shared_ptr rl, bool yn, bool group_override) +Session::rt_set_listen (boost::shared_ptr rl, bool yn, bool /*group_override*/ ) { for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { if (!(*i)->is_hidden()) { @@ -118,7 +118,7 @@ Session::set_mute (boost::shared_ptr rl, bool yn, SessionEvent::RTeve } void -Session::rt_set_mute (boost::shared_ptr rl, bool yn, bool group_override) +Session::rt_set_mute (boost::shared_ptr rl, bool yn, bool /*group_override*/) { for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { if (!(*i)->is_hidden()) { @@ -129,6 +129,24 @@ Session::rt_set_mute (boost::shared_ptr rl, bool yn, bool group_overr set_dirty(); } +void +Session::set_solo_isolated (boost::shared_ptr rl, bool yn, SessionEvent::RTeventCallback after, bool group_override) +{ + queue_event (get_rt_event (rl, yn, after, group_override, &Session::rt_set_solo_isolated)); +} + +void +Session::rt_set_solo_isolated (boost::shared_ptr rl, bool yn, bool /*group_override*/) +{ + for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { + if (!(*i)->is_master() && !(*i)->is_monitor() && !(*i)->is_hidden()) { + (*i)->set_solo_isolated (yn, this); + } + } + + set_dirty(); +} + void Session::set_record_enable (boost::shared_ptr rl, bool yn, SessionEvent::RTeventCallback after, bool group_override) { @@ -162,8 +180,8 @@ Session::process_rtop (SessionEvent* ev) { ev->rt_slot (); - if (ev->ui) { - ev->ui->call_slot (boost::bind (ev->rt_return, ev)); + if (ev->event_loop) { + ev->event_loop->call_slot (MISSING_INVALIDATOR, boost::bind (ev->rt_return, ev)); } else { warning << string_compose ("programming error: %1", X_("Session RT event queued from thread without a UI - cleanup in RT thread!")) << endmsg; ev->rt_return (ev);