summaryrefslogtreecommitdiff
path: root/gtk2_ardour/audio_region_view.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-04-22 01:40:33 +0000
committerCarl Hetherington <carl@carlh.net>2010-04-22 01:40:33 +0000
commit9213e9c9094468ce21be378ea017b0da1405bf03 (patch)
tree99424cd6f17fa93a354deae97db76af98b6f06e7 /gtk2_ardour/audio_region_view.cc
parent5b4b2c04e522f8c71b23359519c19160c886c8b9 (diff)
Allow more than one peaks_ready callback to be pending for an AudioRegionView
at any one time. Prevents problems when there is more than 1 channel for which peaks are not ready; before, the first peaks_ready callback would be forgotten when the second one was requested. Should fix #3074. git-svn-id: svn://localhost/ardour2/branches/3.0@6951 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/audio_region_view.cc')
-rw-r--r--gtk2_ardour/audio_region_view.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 394751b88c..a3aa56d26f 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -110,7 +110,6 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other)
, _amplitude_above_axis(1.0)
, _flags(0)
, fade_color(0)
-
{
Gdk::Color c;
int r,g,b,a;
@@ -132,7 +131,6 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
, _amplitude_above_axis(1.0)
, _flags(0)
, fade_color(0)
-
{
Gdk::Color c;
int r,g,b,a;
@@ -251,6 +249,10 @@ AudioRegionView::~AudioRegionView ()
gnome_canvas_waveview_cache_destroy (*cache);
}
+ for (vector<ScopedConnection*>::iterator i = _data_ready_connections.begin(); i != _data_ready_connections.end(); ++i) {
+ delete *i;
+ }
+
/* all waveviews etc will be destroyed when the group is destroyed */
delete gain_line;
@@ -860,6 +862,16 @@ AudioRegionView::create_waves ()
tmp_waves.push_back (0);
}
+ for (vector<ScopedConnection*>::iterator i = _data_ready_connections.begin(); i != _data_ready_connections.end(); ++i) {
+ delete *i;
+ }
+
+ _data_ready_connections.clear ();
+
+ for (uint32_t i = 0; i < nchans.n_audio(); ++i) {
+ _data_ready_connections.push_back (0);
+ }
+
for (uint32_t n = 0; n < nchans.n_audio(); ++n) {
if (n >= audio_region()->n_channels()) {
@@ -871,7 +883,7 @@ AudioRegionView::create_waves ()
// cerr << "\tchannel " << n << endl;
if (wait_for_data) {
- if (audio_region()->audio_source(n)->peaks_ready (boost::bind (&AudioRegionView::peaks_ready_handler, this, n), data_ready_connection, gui_context())) {
+ if (audio_region()->audio_source(n)->peaks_ready (boost::bind (&AudioRegionView::peaks_ready_handler, this, n), &_data_ready_connections[n], gui_context())) {
// cerr << "\tData is ready\n";
create_one_wave (n, true);
} else {
@@ -967,7 +979,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool /*direct*/)
tmp_waves.clear ();
/* all waves created, don't hook into peaks ready anymore */
- data_ready_connection.disconnect ();
+ delete _data_ready_connections[which];
+ _data_ready_connections[which] = 0;
#if 0
if (!zero_line) {