summaryrefslogtreecommitdiff
path: root/libs/ardour/session.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-02-27 22:16:12 +0100
committerRobin Gareus <robin@gareus.org>2020-02-27 22:16:12 +0100
commit08559abc106283cd8c57a8dfc9dd3b6aa79fdcac (patch)
treebd772f74b80d3de4ae2f06ddc036c72ab340413f /libs/ardour/session.cc
parentef512d412d860b873f0bb478ee1b40217c50054e (diff)
Add signals to indicate Punch/Loop constraints
This is in preparation for GUI sensitivity of Loop and Punch actions.
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r--libs/ardour/session.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index a2c61c8bb8..74c0fbb22e 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -1428,12 +1428,25 @@ Session::loop_is_possible () const
return g_atomic_int_get(&_punch_or_loop) != OnlyPunch;
}
+void
+Session::reset_punch_loop_constraint ()
+{
+ if (g_atomic_int_get (&_punch_or_loop) == NoConstraint) {
+ return;
+ }
+ g_atomic_int_set (&_punch_or_loop, NoConstraint);
+ PunchLoopConstraintChange (); /* EMIT SIGNAL */
+}
+
bool
Session::maybe_allow_only_loop (bool play_loop) {
if (!(get_play_loop () || play_loop)) {
return false;
}
bool rv = g_atomic_int_compare_and_exchange (&_punch_or_loop, NoConstraint, OnlyLoop);
+ if (rv) {
+ PunchLoopConstraintChange (); /* EMIT SIGNAL */
+ }
if (rv || loop_is_possible ()) {
unset_punch ();
return true;
@@ -1447,6 +1460,9 @@ Session::maybe_allow_only_punch () {
return false;
}
bool rv = g_atomic_int_compare_and_exchange (&_punch_or_loop, NoConstraint, OnlyPunch);
+ if (rv) {
+ PunchLoopConstraintChange (); /* EMIT SIGNAL */
+ }
return rv || punch_is_possible ();
}