-class LIBARDOUR_API AutomationWatch : public sigc::trackable, public ARDOUR::SessionHandlePtr, public PBD::ScopedConnectionList {
- public:
- static AutomationWatch& instance();
-
- void add_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
- void remove_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
- void set_session (ARDOUR::Session*);
-
- gint timer ();
-
- private:
- typedef std::set<boost::shared_ptr<ARDOUR::AutomationControl> > AutomationWatches;
-
- AutomationWatch ();
- ~AutomationWatch();
-
- static AutomationWatch* _instance;
- Glib::Threads::Thread* _thread;
- framepos_t _last_time;
- bool _run_thread;
- AutomationWatches automation_watches;
- Glib::Threads::Mutex automation_watch_lock;
- PBD::ScopedConnection transport_connection;
-
- void transport_state_change ();
- void remove_weak_automation_watch (boost::weak_ptr<ARDOUR::AutomationControl>);
- void thread ();
+class LIBARDOUR_API AutomationWatch : public sigc::trackable, public ARDOUR::SessionHandlePtr
+{
+public:
+ static AutomationWatch& instance();
+
+ void add_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
+ void remove_automation_watch (boost::shared_ptr<ARDOUR::AutomationControl>);
+ void transport_stop_automation_watches (ARDOUR::samplepos_t);
+ void set_session (ARDOUR::Session*);
+
+ gint timer ();
+
+private:
+ typedef std::set<boost::shared_ptr<ARDOUR::AutomationControl> > AutomationWatches;
+ typedef std::map<boost::shared_ptr<ARDOUR::AutomationControl>, PBD::ScopedConnection> AutomationConnection;
+
+ AutomationWatch ();
+ ~AutomationWatch();
+
+ static AutomationWatch* _instance;
+ Glib::Threads::Thread* _thread;
+ samplepos_t _last_time;
+ bool _run_thread;
+ AutomationWatches automation_watches;
+ AutomationConnection automation_connections;
+ Glib::Threads::Mutex automation_watch_lock;
+ PBD::ScopedConnection transport_connection;
+
+ void transport_state_change ();
+ void remove_weak_automation_watch (boost::weak_ptr<ARDOUR::AutomationControl>);
+ void thread ();