From 667c23d74383c48c80a8b3763bda994ffc9028a8 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Sun, 27 Nov 2022 00:36:02 +0200 Subject: [PATCH] kutils: delete the player before the UI from KMediaWidget destructor Signed-off-by: Ivailo Monev --- kutils/kmediaplayer/kmediaplayer.cpp | 6 ++++-- kutils/kmediaplayer/kmediawidget.cpp | 15 +++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/kutils/kmediaplayer/kmediaplayer.cpp b/kutils/kmediaplayer/kmediaplayer.cpp index d4c088c1..68a959a7 100644 --- a/kutils/kmediaplayer/kmediaplayer.cpp +++ b/kutils/kmediaplayer/kmediaplayer.cpp @@ -531,7 +531,8 @@ static void wakeup_audio(void *ctx) } KAudioPlayer::KAudioPlayer(QObject *parent) - : QObject(parent), d(new KAbstractPlayerPrivate()) + : QObject(parent), + d(new KAbstractPlayerPrivate()) { #if defined(HAVE_MPV) if (d->m_handle) { @@ -619,7 +620,8 @@ static void wakeup_media(void *ctx) } KMediaPlayer::KMediaPlayer(QWidget *parent) - : QWidget(parent), d(new KAbstractPlayerPrivate) + : QWidget(parent), + d(new KAbstractPlayerPrivate()) { #if defined(HAVE_MPV) if (d->m_handle) { diff --git a/kutils/kmediaplayer/kmediawidget.cpp b/kutils/kmediaplayer/kmediawidget.cpp index 88a0a259..b508a5af 100644 --- a/kutils/kmediaplayer/kmediawidget.cpp +++ b/kutils/kmediaplayer/kmediawidget.cpp @@ -53,16 +53,19 @@ public: }; KMediaWidgetPrivate::KMediaWidgetPrivate() - : m_dragdrop(false), m_fullscreen(false), m_hiddencontrols(false), m_smoothvolume(false), + : m_player(nullptr), + m_dragdrop(false), m_fullscreen(false), m_hiddencontrols(false), m_smoothvolume(false), m_parent(nullptr), m_parenthack(nullptr), m_timerid(0), m_replay(false), - m_visible(false) + m_visible(false), + m_ui(nullptr) { } KMediaWidget::KMediaWidget(QWidget *parent, KMediaOptions options) - : QWidget(parent), d(new KMediaWidgetPrivate()) + : QWidget(parent), + d(new KMediaWidgetPrivate()) { d->m_ui = new Ui_KMediaWidgetPrivate(); d->m_ui->setupUi(this); @@ -123,7 +126,11 @@ KMediaWidget::~KMediaWidget() setVolume(d->m_volumeline.endFrame()); } d->m_player->stop(); - d->m_player->deleteLater(); + /* + Deleting the player has to be done before the UI is deleted because the player is embeded + into UI widget and MPV accessing the window ID of d->m_ui->w_player may cause fatal X11 I/O + */ + delete d->m_player; delete d->m_ui; delete d; }