diff options
author | Carl Hetherington <carl@carlh.net> | 2010-04-22 01:40:33 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-04-22 01:40:33 +0000 |
commit | 9213e9c9094468ce21be378ea017b0da1405bf03 (patch) | |
tree | 99424cd6f17fa93a354deae97db76af98b6f06e7 /gtk2_ardour/audio_region_view.cc | |
parent | 5b4b2c04e522f8c71b23359519c19160c886c8b9 (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.cc | 21 |
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) { |