better handling of the inverse-push of solo-by-upstream. still not quite right, but...
[ardour.git] / libs / ardour / session_butler.cc
index 41b4851ce5a0112622255cedf9cf70176ffc2f2b..1aa061313d00fe4e72c3668c3b96c7a8ebbc79e9 100644 (file)
@@ -40,6 +40,7 @@
 #include "ardour/midi_diskstream.h"
 #include "ardour/session.h"
 #include "ardour/timestamps.h"
+#include "ardour/track.h"
 
 #include "i18n.h"
 
@@ -68,39 +69,42 @@ static inline uint32_t next_power_of_two (uint32_t n)
 void
 Session::schedule_curve_reallocation ()
 {
-       post_transport_work = PostTransportWork (post_transport_work | PostTransportCurveRealloc);
+       add_post_transport_work (PostTransportCurveRealloc);
        _butler->schedule_transport_work ();
 }
 
 void
-Session::request_overwrite_buffer (Diskstream* stream)
+Session::request_overwrite_buffer (Track* t)
 {
-       Event *ev = new Event (Event::Overwrite, Event::Add, Event::Immediate, 0, 0, 0.0);
-       ev->set_ptr (stream);
+       SessionEvent *ev = new SessionEvent (SessionEvent::Overwrite, SessionEvent::Add, SessionEvent::Immediate, 0, 0, 0.0);
+       ev->set_ptr (t);
        queue_event (ev);
 }
 
 /** Process thread. */
 void
-Session::overwrite_some_buffers (Diskstream* ds)
+Session::overwrite_some_buffers (Track* t)
 {
        if (actively_recording()) {
                return;
        }
 
-       if (ds) {
+       if (t) {
 
-               ds->set_pending_overwrite (true);
+               t->set_pending_overwrite (true);
 
        } else {
 
-               boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
-               for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
-                       (*i)->set_pending_overwrite (true);
+               boost::shared_ptr<RouteList> rl = routes.reader();
+               for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+                       boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+                       if (tr) {
+                               tr->set_pending_overwrite (true);
+                       }
                }
        }
 
-       post_transport_work = PostTransportWork (post_transport_work | PostTransportOverWrite);
+       add_post_transport_work (PostTransportOverWrite);
        _butler->schedule_transport_work ();
 }