session: add signal to indicate batch updates
authorRobin Gareus <robin@gareus.org>
Thu, 30 Apr 2015 15:58:33 +0000 (17:58 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 30 Apr 2015 15:58:33 +0000 (17:58 +0200)
…to tell the UI to not redraw.

libs/ardour/ardour/session.h
libs/ardour/session_process.cc

index 594b85f29c0a70491266f28d685257115ab620d4..c44adec501314ca33910d4624281e9491d0d090d 100644 (file)
@@ -183,6 +183,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
 
        static PBD::Signal1<void,std::string> Dialog;
 
+       PBD::Signal0<void> BatchUpdateStart;
+       PBD::Signal0<void> BatchUpdateEnd;
+
        int ensure_subdirs ();
 
        std::string automation_dir () const;  ///< Automation data
@@ -1272,7 +1275,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        void *do_work();
 
        /* Signal Forwarding */
-       void emit_route_signals () const;
+       void emit_route_signals ();
        void emit_thread_run ();
        static void *emit_thread (void *);
        void emit_thread_start ();
index 6366abde7196137687307b8e1aa97ded9cbab551..404f06128f8bcafee88f7ca89bd00692a31bfd4b 100644 (file)
@@ -1254,12 +1254,15 @@ Session::compute_stop_limit () const
  */
 
 void
-Session::emit_route_signals () const
+Session::emit_route_signals ()
 {
+       // TODO use RAII to allow using these signals in other places
+       BatchUpdateStart(); /* EMIT SIGNAL */
        boost::shared_ptr<RouteList> r = routes.reader ();
        for (RouteList::const_iterator ci = r->begin(); ci != r->end(); ++ci) {
                (*ci)->emit_pending_signals ();
        }
+       BatchUpdateEnd(); /* EMIT SIGNAL */
 }
 
 void