Emit Session::Located only if _engine.transport_frame() is up to date
authorJohannes Mueller <github@johannes-mueller.org>
Fri, 9 Jun 2017 19:31:15 +0000 (21:31 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 10 Jun 2017 16:30:42 +0000 (18:30 +0200)
If _engine.transport_frame() is not up to date, we emit Located in
Session::backend_sync_callback() because that's when audible_frame() is up to
date. We don't want to emit it twice, because then, the playhead jumps back and
forth.

* mouse click in the ruler -> jump to requested location
* mouse release -> jump to old location (because audible_frame has to catch up)
* backend_sync_callback() called -> jump to new location

libs/ardour/session_transport.cc

index e80978a8058d9f7e6e781420eecac1b563cb2183..65a9748ce60ebfe6187f533bac973cc2e140621d 100644 (file)
@@ -1367,7 +1367,9 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
        }
 
        _last_roll_location = _last_roll_or_reversal_location =  _transport_frame;
-       Located (); /* EMIT SIGNAL */
+       if (!synced_to_engine () || _transport_frame == _engine.transport_frame ()) {
+               Located (); /* EMIT SIGNAL */
+       }
 }
 
 /** Set the transport speed.