Skip to content

Commit

Permalink
Merge pull request #12314 from uklotzde/wwaveformviewer
Browse files Browse the repository at this point in the history
WWaveformViewer: Fix dangling pointer access and invalid connection
  • Loading branch information
JoergAtGithub committed Nov 19, 2023
2 parents 714f852 + 47204a6 commit 3223a75
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
21 changes: 14 additions & 7 deletions src/widget/wwaveformviewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,7 @@ WWaveformViewer::WWaveformViewer(
group, "wheel", this, ControlFlag::NoAssertIfMissing);
m_pPlayEnabled = new ControlProxy(group, "play", this, ControlFlag::NoAssertIfMissing);
m_pPassthroughEnabled = make_parented<ControlProxy>(group, "passthrough", this);
m_pPassthroughEnabled->connectValueChanged(this,
&WWaveformViewer::passthroughChanged,
Qt::DirectConnection);
m_pPassthroughEnabled->connectValueChanged(this, &WWaveformViewer::passthroughChanged);

setAttribute(Qt::WA_OpaquePaintEvent);
setFocusPolicy(Qt::NoFocus);
Expand All @@ -52,8 +50,8 @@ WWaveformViewer::~WWaveformViewer() {
void WWaveformViewer::setup(const QDomNode& node, const SkinContext& context) {
if (m_waveformWidget) {
m_waveformWidget->setup(node, context);
m_dimBrightThreshold = m_waveformWidget->getDimBrightThreshold();
}
m_dimBrightThreshold = m_waveformWidget->getDimBrightThreshold();
}

void WWaveformViewer::resizeEvent(QResizeEvent* event) {
Expand Down Expand Up @@ -248,7 +246,9 @@ void WWaveformViewer::setZoom(double zoom) {
}

void WWaveformViewer::setDisplayBeatGridAlpha(int alpha) {
m_waveformWidget->setDisplayBeatGridAlpha(alpha);
if (m_waveformWidget) {
m_waveformWidget->setDisplayBeatGridAlpha(alpha);
}
}

void WWaveformViewer::setPlayMarkerPosition(double position) {
Expand All @@ -260,12 +260,19 @@ void WWaveformViewer::setPlayMarkerPosition(double position) {
void WWaveformViewer::setWaveformWidget(WaveformWidgetAbstract* waveformWidget) {
if (m_waveformWidget) {
QWidget* pWidget = m_waveformWidget->getWidget();
disconnect(pWidget, &QWidget::destroyed, this, &WWaveformViewer::slotWidgetDead);
disconnect(pWidget);
}
m_waveformWidget = waveformWidget;
if (m_waveformWidget) {
QWidget* pWidget = m_waveformWidget->getWidget();
connect(pWidget, &QWidget::destroyed, this, &WWaveformViewer::slotWidgetDead);
DEBUG_ASSERT(pWidget);
connect(pWidget,
&QWidget::destroyed,
this,
[this]() {
// The pointer must be considered as dangling!
m_waveformWidget = nullptr;
});
m_waveformWidget->getWidget()->setMouseTracking(true);
#ifdef MIXXX_USE_QOPENGL
if (m_waveformWidget->getGLWidget()) {
Expand Down
3 changes: 0 additions & 3 deletions src/widget/wwaveformviewer.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,6 @@ class WWaveformViewer : public WWidget, public TrackDropTarget {

private slots:
void onZoomChange(double zoom);
void slotWidgetDead() {
m_waveformWidget = nullptr;
}

private:
void setWaveformWidget(WaveformWidgetAbstract* waveformWidget);
Expand Down

0 comments on commit 3223a75

Please sign in to comment.