From: Paul Davis Date: Tue, 12 Jul 2016 15:19:15 +0000 (-0400) Subject: once the user has explicitly set the session range end, playlist/range changes do... X-Git-Tag: 5.0-pre1~162 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=472ef8c55cc976a581721392ffc1e3a2209ad1fe 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 --- diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 2f2b774c30..696e97ca9d 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -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; diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 043d72d128..9e9b530ce3 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -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 > const & ranges) { diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 752c8d03c9..1aafd7118b 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -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);