From 9c7a244ac08898b9e0b41454204bc4cba52c28e8 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 2 Dec 2013 15:31:54 +0000 Subject: [PATCH] Fix crash on double-click of show-audio button. --- ChangeLog | 2 ++ src/lib/audio_content.cc | 10 +++++----- src/lib/audio_content.h | 2 +- src/wx/audio_dialog.cc | 6 +++--- src/wx/audio_dialog.h | 1 + 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 286a6e8aa..158ea0503 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2013-12-02 Carl Hetherington + * Fix crash on double-click of "show audio" button (#278). + * Version 1.40 released. 2013-12-02 Carl Hetherington diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index 04823d1e6..97372b962 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -119,17 +119,17 @@ AudioContent::set_audio_delay (int d) signal_changed (AudioContentProperty::AUDIO_DELAY); } -void +boost::signals2::connection AudioContent::analyse_audio (boost::function finished) { shared_ptr film = _film.lock (); - if (!film) { - return; - } + assert (film); shared_ptr job (new AnalyseAudioJob (film, dynamic_pointer_cast (shared_from_this()))); - job->Finished.connect (finished); + boost::signals2::connection c = job->Finished.connect (finished); JobManager::instance()->add (job); + + return c; } boost::filesystem::path diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h index b100d7aba..ca4a1f234 100644 --- a/src/lib/audio_content.h +++ b/src/lib/audio_content.h @@ -58,7 +58,7 @@ public: virtual AudioMapping audio_mapping () const = 0; virtual void set_audio_mapping (AudioMapping) = 0; - void analyse_audio (boost::function); + boost::signals2::connection analyse_audio (boost::function); boost::filesystem::path audio_analysis_path () const; void set_audio_gain (float); diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc index 78f3deab6..1bce22811 100644 --- a/src/wx/audio_dialog.cc +++ b/src/wx/audio_dialog.cc @@ -87,7 +87,7 @@ void AudioDialog::set_content (shared_ptr c) { _content_changed_connection.disconnect (); - + _content = c; try_to_load_analysis (); @@ -104,9 +104,9 @@ AudioDialog::try_to_load_analysis () if (!IsShown ()) { return; } - + if (!boost::filesystem::exists (_content->audio_analysis_path())) { - _content->analyse_audio (bind (&AudioDialog::analysis_finished, this)); + _analysis_finished_connection = _content->analyse_audio (bind (&AudioDialog::analysis_finished, this)); return; } diff --git a/src/wx/audio_dialog.h b/src/wx/audio_dialog.h index 8623192c4..b4257057d 100644 --- a/src/wx/audio_dialog.h +++ b/src/wx/audio_dialog.h @@ -47,4 +47,5 @@ private: wxCheckBox* _type_checkbox[AudioPoint::COUNT]; wxSlider* _smoothing; boost::signals2::scoped_connection _content_changed_connection; + boost::signals2::scoped_connection _analysis_finished_connection; }; -- 2.30.2