diff --git a/app/panel/panelmanager.cpp b/app/panel/panelmanager.cpp index f85e6824f..252deae05 100644 --- a/app/panel/panelmanager.cpp +++ b/app/panel/panelmanager.cpp @@ -36,6 +36,8 @@ PanelManager::PanelManager(QObject *parent) : void PanelManager::DeleteAllPanels() { foreach (PanelWidget* panel, focus_history_) { + // We don't need to run this signal anymore since we're destroying and clearing everything + disconnect(panel, &PanelWidget::destroyed, this, &PanelManager::PanelDestroyed); delete panel; } focus_history_.clear(); diff --git a/app/widget/scope/waveform/waveform.cpp b/app/widget/scope/waveform/waveform.cpp index 64c71004d..d8f6b6e71 100644 --- a/app/widget/scope/waveform/waveform.cpp +++ b/app/widget/scope/waveform/waveform.cpp @@ -33,6 +33,15 @@ WaveformScope::WaveformScope(QWidget* parent) : EnableDefaultContextMenu(); } +WaveformScope::~WaveformScope() +{ + CleanUp(); + + if (context()) { + disconnect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &WaveformScope::CleanUp); + } +} + void WaveformScope::SetBuffer(Frame *frame) { buffer_ = frame; @@ -54,9 +63,7 @@ void WaveformScope::initializeGL() connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &WaveformScope::CleanUp, Qt::DirectConnection); - if (buffer_) { - UploadTextureFromBuffer(); - } + UploadTextureFromBuffer(); } void WaveformScope::paintGL() @@ -86,6 +93,10 @@ void WaveformScope::paintGL() void WaveformScope::UploadTextureFromBuffer() { + if (!buffer_) { + return; + } + makeCurrent(); if (!texture_.IsCreated() @@ -105,8 +116,6 @@ void WaveformScope::UploadTextureFromBuffer() void WaveformScope::CleanUp() { - qDebug() << "Cleaned up..."; - makeCurrent(); pipeline_ = nullptr; diff --git a/app/widget/scope/waveform/waveform.h b/app/widget/scope/waveform/waveform.h index efb7a08b4..dd9d40452 100644 --- a/app/widget/scope/waveform/waveform.h +++ b/app/widget/scope/waveform/waveform.h @@ -35,6 +35,8 @@ class WaveformScope : public ManagedDisplayWidget public: WaveformScope(QWidget* parent = nullptr); + virtual ~WaveformScope() override; + public slots: void SetBuffer(Frame* frame);