summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-04-10 14:42:11 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-04-10 14:42:11 +0000
commita588b517e8625f758bedc66d6a7da12e8f6169c9 (patch)
tree3809a92e96340d76cb9c8c31c99106ecd70e4312
parent3b885c312674feef410243bafeef1598238ebb18 (diff)
fixes from carl for #1158 and #1554, plus better behaviour when building the region boundary cache
git-svn-id: svn://localhost/ardour2/trunk@1694 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/ardour_ui2.cc2
-rw-r--r--gtk2_ardour/editor_ops.cc9
-rw-r--r--gtk2_ardour/redirect_box.cc24
-rw-r--r--libs/ardour/ardour/route.h4
-rw-r--r--libs/ardour/route.cc37
5 files changed, 48 insertions, 28 deletions
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 1e038e3ac7..0dab2657be 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -606,7 +606,7 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
shuttle_grabbed = false;
shuttle_box.remove_modal_grab ();
if (Config->get_shuttle_behaviour() == Sprung) {
- if (Config->get_auto_play() || roll_button.get_state()) {
+ if (Config->get_auto_play() || session->transport_rolling()) {
shuttle_fract = SHUTTLE_FRACT_SPEED1;
session->request_transport_speed (1.0);
stop_button.set_visual_state (0);
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index f80ec708eb..c478f47bde 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -500,15 +500,6 @@ Editor::build_region_boundary_cache ()
break;
}
- } else if (clicked_trackview) {
-
- TrackViewList t;
- t.push_back (clicked_trackview);
-
- if ((r = find_next_region (pos, point, 1, t, &ontrack)) == 0) {
- break;
- }
-
} else {
if ((r = find_next_region (pos, point, 1, track_views, &ontrack)) == 0) {
diff --git a/gtk2_ardour/redirect_box.cc b/gtk2_ardour/redirect_box.cc
index 2ab3b7af4a..d3e616eb0b 100644
--- a/gtk2_ardour/redirect_box.cc
+++ b/gtk2_ardour/redirect_box.cc
@@ -957,21 +957,31 @@ could not match the configuration of this track.");
void
RedirectBox::all_redirects_active (bool state)
{
- _route->all_redirects_active (state);
+ _route->all_redirects_active (_placement, state);
}
void
-RedirectBox::clear_redirects()
+RedirectBox::clear_redirects ()
{
string prompt;
vector<string> choices;
if (boost::dynamic_pointer_cast<AudioTrack>(_route) != 0) {
- prompt = _("Do you really want to remove all redirects from this track?\n"
- "(this cannot be undone)");
+ if (_placement == PreFader) {
+ prompt = _("Do you really want to remove all pre-fader redirects from this track?\n"
+ "(this cannot be undone)");
+ } else {
+ prompt = _("Do you really want to remove all post-fader redirects from this track?\n"
+ "(this cannot be undone)");
+ }
} else {
- prompt = _("Do you really want to remove all redirects from this bus?\n"
- "(this cannot be undone)");
+ if (_placement == PreFader) {
+ prompt = _("Do you really want to remove all pre-fader redirects from this bus?\n"
+ "(this cannot be undone)");
+ } else {
+ prompt = _("Do you really want to remove all post-fader redirects from this bus?\n"
+ "(this cannot be undone)");
+ }
}
choices.push_back (_("Cancel"));
@@ -980,7 +990,7 @@ RedirectBox::clear_redirects()
Gtkmm2ext::Choice prompter (prompt, choices);
if (prompter.run () == 1) {
- _route->clear_redirects (this);
+ _route->clear_redirects (_placement, this);
}
}
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index f3436ca8ea..442c006e9b 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -169,9 +169,9 @@ class Route : public IO
int copy_redirects (const Route&, Placement, uint32_t* err_streams = 0);
int sort_redirects (uint32_t* err_streams = 0);
- void clear_redirects (void *src);
+ void clear_redirects (Placement, void *src);
void all_redirects_flip();
- void all_redirects_active (bool state);
+ void all_redirects_active (Placement, bool state);
virtual nframes_t update_total_latency();
nframes_t signal_latency() const { return _own_latency; }
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index edb7adfee0..091ff549ad 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -112,7 +112,8 @@ Route::init ()
Route::~Route ()
{
- clear_redirects (this);
+ clear_redirects (PreFader, this);
+ clear_redirects (PostFader, this);
for (OrderKeys::iterator i = order_keys.begin(); i != order_keys.end(); ++i) {
free ((void*)(i->first));
@@ -924,10 +925,13 @@ Route::add_redirects (const RedirectList& others, void *src, uint32_t* err_strea
return 0;
}
+/** Remove redirects with a given placement.
+ * @param p Placement of redirects to remove.
+ */
void
-Route::clear_redirects (void *src)
+Route::clear_redirects (Placement p, void *src)
{
- uint32_t old_rmo = redirect_max_outs;
+ const uint32_t old_rmo = redirect_max_outs;
if (!_session.engine().connected()) {
return;
@@ -935,13 +939,22 @@ Route::clear_redirects (void *src)
{
Glib::RWLock::WriterLock lm (redirect_lock);
- RedirectList::iterator i;
- for (i = _redirects.begin(); i != _redirects.end(); ++i) {
- (*i)->drop_references ();
+ RedirectList new_list;
+
+ for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
+ if ((*i)->placement() == p) {
+ /* it's the placement we want to get rid of */
+ (*i)->drop_references ();
+ } else {
+ /* it's a different placement, so keep it */
+ new_list.push_back (*i);
+ }
}
- _redirects.clear ();
+
+ _redirects = new_list;
}
+ /* FIXME: can't see how this test can ever fire */
if (redirect_max_outs != old_rmo) {
reset_panner ();
}
@@ -1309,8 +1322,12 @@ Route::all_redirects_flip ()
}
}
+/** Set all redirects with a given placement to a given active state.
+ * @param p Placement of redirects to change.
+ * @param state New active state for those redirects.
+ */
void
-Route::all_redirects_active (bool state)
+Route::all_redirects_active (Placement p, bool state)
{
Glib::RWLock::ReaderLock lm (redirect_lock);
@@ -1319,7 +1336,9 @@ Route::all_redirects_active (bool state)
}
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
- (*i)->set_active (state, this);
+ if ((*i)->placement() == p) {
+ (*i)->set_active (state, this);
+ }
}
}