switch Evoral::Sequence debugging to use DEBUG_TRACE(); Sequence uses multiset<....
[ardour.git] / libs / ardour / session_rtevents.cc
index 945e4220760848a17d154e9ac013a82f0e6bc707..921a6348ebdd87cfc7fd507cf2700ceaf4203e56 100644 (file)
@@ -33,13 +33,13 @@ using namespace ARDOUR;
 using namespace Glib;
 
 SessionEvent*
-Session::get_rt_event (boost::shared_ptr<RouteList> rl, bool yn, SessionEvent::RTeventCallback after, bool group_override, 
+Session::get_rt_event (boost::shared_ptr<RouteList> rl, bool yn, SessionEvent::RTeventCallback after, bool group_override,  
                       void (Session::*method) (boost::shared_ptr<RouteList>, 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<RouteList> rl, bool yn, SessionEvent::RTeve
 }
 
 void
-Session::rt_set_solo (boost::shared_ptr<RouteList> rl, bool yn, bool group_override)
+Session::rt_set_solo (boost::shared_ptr<RouteList> 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<RouteList> rl, bool yn, SessionEvent::RTe
 }
 
 void
-Session::rt_set_listen (boost::shared_ptr<RouteList> rl, bool yn, bool group_override)
+Session::rt_set_listen (boost::shared_ptr<RouteList> 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<RouteList> rl, bool yn, SessionEvent::RTeve
 }
 
 void
-Session::rt_set_mute (boost::shared_ptr<RouteList> rl, bool yn, bool group_override)
+Session::rt_set_mute (boost::shared_ptr<RouteList> 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<RouteList> rl, bool yn, bool group_overr
        set_dirty();
 }
 
+void
+Session::set_solo_isolated (boost::shared_ptr<RouteList> 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<RouteList> 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<RouteList> 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);