once the user has explicitly set the session range end, playlist/range changes do not move it.
The user may drag the marker, edit in the Location UI, or use nudge, to set the end
This commit is contained in:
parent
49fbb6fa15
commit
472ef8c55c
|
@ -459,6 +459,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
|||
void set_auto_punch_location (Location *);
|
||||
void set_auto_loop_location (Location *);
|
||||
void set_session_extents (framepos_t start, framepos_t end);
|
||||
void set_end_is_free (bool);
|
||||
int location_name(std::string& result, std::string base = std::string(""));
|
||||
|
||||
pframes_t get_block_size() const { return current_block_size; }
|
||||
|
@ -1175,6 +1176,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
|||
mutable gint _record_status;
|
||||
framepos_t _transport_frame;
|
||||
Location* _session_range_location; ///< session range, or 0 if there is nothing in the session yet
|
||||
bool _session_range_end_is_free;
|
||||
Slave* _slave;
|
||||
bool _silent;
|
||||
|
||||
|
|
|
@ -178,6 +178,7 @@ Session::Session (AudioEngine &eng,
|
|||
, _record_status (Disabled)
|
||||
, _transport_frame (0)
|
||||
, _session_range_location (0)
|
||||
, _session_range_end_is_free (true)
|
||||
, _slave (0)
|
||||
, _silent (false)
|
||||
, _transport_speed (0)
|
||||
|
@ -4389,12 +4390,18 @@ Session::maybe_update_session_range (framepos_t a, framepos_t b)
|
|||
_session_range_location->set_start (a);
|
||||
}
|
||||
|
||||
if (b > _session_range_location->end()) {
|
||||
if (_session_range_end_is_free && (b > _session_range_location->end())) {
|
||||
_session_range_location->set_end (b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Session::set_end_is_free (bool yn)
|
||||
{
|
||||
_session_range_end_is_free = yn;
|
||||
}
|
||||
|
||||
void
|
||||
Session::playlist_ranges_moved (list<Evoral::RangeMove<framepos_t> > const & ranges)
|
||||
{
|
||||
|
|
|
@ -1095,6 +1095,8 @@ Session::state (bool full_state)
|
|||
}
|
||||
}
|
||||
|
||||
node->add_property ("end-is-free", _session_range_end_is_free ? X_("yes") : X_("no"));
|
||||
|
||||
/* save the ID counter */
|
||||
|
||||
snprintf (buf, sizeof (buf), "%" PRIu64, ID::counter());
|
||||
|
@ -1358,6 +1360,10 @@ Session::set_state (const XMLNode& node, int version)
|
|||
|
||||
setup_raid_path(_session_dir->root_path());
|
||||
|
||||
if ((prop = node.property (X_("end-is-free"))) != 0) {
|
||||
_session_range_end_is_free = string_is_affirmative (prop->value());
|
||||
}
|
||||
|
||||
if ((prop = node.property (X_("id-counter"))) != 0) {
|
||||
uint64_t x;
|
||||
sscanf (prop->value().c_str(), "%" PRIu64, &x);
|
||||
|
|
Loading…
Reference in New Issue