From a65f03f8cefc3e1d2e6b71ace15789fc63795275 Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Sun, 16 Oct 2011 21:35:39 +0000 Subject: Fixed crashes reloading songs having open editors. Previous memleak fixes revealed some problems. Installed bool TopWin::deleting(). It is set true when closeEvent() is called in any self-deleting TopWins. Used it to make all such TopWins and their corresponding child canvasses ignore songChanged signals. --- muse2/muse/waveedit/waveedit.cpp | 8 ++++++-- muse2/muse/waveedit/waveedit.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'muse2/muse/waveedit') diff --git a/muse2/muse/waveedit/waveedit.cpp b/muse2/muse/waveedit/waveedit.cpp index 424f0688..8d58cfb3 100644 --- a/muse2/muse/waveedit/waveedit.cpp +++ b/muse2/muse/waveedit/waveedit.cpp @@ -64,10 +64,12 @@ namespace MusEGui { void WaveEdit::closeEvent(QCloseEvent* e) { + _isDeleting = true; // Set flag so certain signals like songChanged, which may cause crash during delete, can be ignored. + QSettings settings("MusE", "MusE-qt"); //settings.setValue("Waveedit/geometry", saveGeometry()); settings.setValue("Waveedit/windowState", saveState()); - emit deleted(static_cast(this)); + emit isDeleting(static_cast(this)); e->accept(); } @@ -458,7 +460,9 @@ void WaveEdit::readStatus(MusECore::Xml& xml) void WaveEdit::songChanged1(int bits) { - + if(_isDeleting) // Ignore while while deleting to prevent crash. + return; + if (bits & SC_SOLO) { MusECore::WavePart* part = (MusECore::WavePart*)(parts()->begin()->second); diff --git a/muse2/muse/waveedit/waveedit.h b/muse2/muse/waveedit/waveedit.h index b40aa93a..85e71a60 100644 --- a/muse2/muse/waveedit/waveedit.h +++ b/muse2/muse/waveedit/waveedit.h @@ -94,7 +94,7 @@ class WaveEdit : public MidiEditor { signals: - void deleted(MusEGui::TopWin*); + void isDeleting(MusEGui::TopWin*); public: WaveEdit(MusECore::PartList*); -- cgit v1.2.3