add to LUA API (new Stripable API)
[ardour.git] / libs / ardour / session_events.cc
index 53a26363b06cf57dfd8d43bd2f81595763638c1e..a14405a9e56feeefd0129cd8570c1a49218b7e05 100644 (file)
@@ -28,7 +28,7 @@
 #include "ardour/debug.h"
 #include "ardour/session_event.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -42,6 +42,12 @@ SessionEvent::init_event_pool ()
        pool = new PerThreadPool;
 }
 
+bool
+SessionEvent::has_per_thread_pool ()
+{
+       return pool->has_per_thread_pool ();
+}
+
 void
 SessionEvent::create_per_thread_pool (const std::string& name, uint32_t nitems)
 {
@@ -73,7 +79,7 @@ SessionEvent::operator new (size_t)
        SessionEvent* ev = static_cast<SessionEvent*> (p->alloc ());
        DEBUG_TRACE (DEBUG::SessionEvents, string_compose ("%1 Allocating SessionEvent from %2 ev @ %3 pool size %4 free %5 used %6\n", pthread_name(), p->name(), ev,
                                                           p->total(), p->available(), p->used()));
-                                                          
+
        ev->own_pool = p;
        return ev;
 }
@@ -205,6 +211,11 @@ SessionEventManager::merge_event (SessionEvent* ev)
 
        /* try to handle immediate events right here */
 
+       if (ev->type == SessionEvent::Locate || ev->type == SessionEvent::LocateRoll) {
+               /* remove any existing Locates that are waiting to execute */
+               _clear_event_type (ev->type);
+       }
+
        if (ev->action_frame == SessionEvent::Immediate) {
                process_event (ev);
                return;
@@ -216,7 +227,6 @@ SessionEventManager::merge_event (SessionEvent* ev)
        case SessionEvent::StopOnce:
                _clear_event_type (ev->type);
                break;
-
        default:
                for (Events::iterator i = events.begin(); i != events.end(); ++i) {
                        if ((*i)->type == ev->type && (*i)->action_frame == ev->action_frame) {
@@ -330,4 +340,3 @@ SessionEventManager::_clear_event_type (SessionEvent::Type type)
 
        set_next_event ();
 }
-