kutils: delete the player before the UI from KMediaWidget destructor

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-11-27 00:36:02 +02:00
parent 98f1b0b90a
commit 667c23d743
2 changed files with 15 additions and 6 deletions

View file

@ -531,7 +531,8 @@ static void wakeup_audio(void *ctx)
} }
KAudioPlayer::KAudioPlayer(QObject *parent) KAudioPlayer::KAudioPlayer(QObject *parent)
: QObject(parent), d(new KAbstractPlayerPrivate()) : QObject(parent),
d(new KAbstractPlayerPrivate())
{ {
#if defined(HAVE_MPV) #if defined(HAVE_MPV)
if (d->m_handle) { if (d->m_handle) {
@ -619,7 +620,8 @@ static void wakeup_media(void *ctx)
} }
KMediaPlayer::KMediaPlayer(QWidget *parent) KMediaPlayer::KMediaPlayer(QWidget *parent)
: QWidget(parent), d(new KAbstractPlayerPrivate) : QWidget(parent),
d(new KAbstractPlayerPrivate())
{ {
#if defined(HAVE_MPV) #if defined(HAVE_MPV)
if (d->m_handle) { if (d->m_handle) {

View file

@ -53,16 +53,19 @@ public:
}; };
KMediaWidgetPrivate::KMediaWidgetPrivate() 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_parent(nullptr), m_parenthack(nullptr),
m_timerid(0), m_timerid(0),
m_replay(false), m_replay(false),
m_visible(false) m_visible(false),
m_ui(nullptr)
{ {
} }
KMediaWidget::KMediaWidget(QWidget *parent, KMediaOptions options) 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 = new Ui_KMediaWidgetPrivate();
d->m_ui->setupUi(this); d->m_ui->setupUi(this);
@ -123,7 +126,11 @@ KMediaWidget::~KMediaWidget()
setVolume(d->m_volumeline.endFrame()); setVolume(d->m_volumeline.endFrame());
} }
d->m_player->stop(); 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->m_ui;
delete d; delete d;
} }