From 9c3d01aca191ce27ef2eb254abd7ca4eee44bf56 Mon Sep 17 00:00:00 2001 From: Elliu <elliu@hashi.re> Date: Wed, 12 Jan 2022 01:04:51 +0100 Subject: [PATCH] WIP: try to properly destroy mpv --- src/module/qt_window/mainwindow.cc | 11 +++++++++++ src/module/qt_window/mainwindow.hh | 9 +++++++++ src/module/qt_window/mpvwidget.hh | 2 +- src/module/qt_window/mpvwidget_interface.cc | 6 +++++- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/module/qt_window/mainwindow.cc b/src/module/qt_window/mainwindow.cc index 0ad17a8a..29c1aa38 100644 --- a/src/module/qt_window/mainwindow.cc +++ b/src/module/qt_window/mainwindow.cc @@ -7,4 +7,15 @@ MainWindow::MainWindow(struct module_qt_window_s *qt_window, QWidget *parent) connect(qt_window->mpv_widget, &MpvWidget::titleChanged, this, &MainWindow::updateWindowTitle); setCentralWidget(qt_window->mpv_widget); setFocusPolicy(Qt::StrongFocus); + + connect(this, &MainWindow::emitCloseMpv, this, &MainWindow::__closeMpv, Qt::QueuedConnection); +} + +void MainWindow::closeMpv(bool* exited) noexcept { + emit emitCloseMpv(exited); +} + +void MainWindow::__closeMpv(bool* exited){ + delete centralWidget(); + *exited = true; } diff --git a/src/module/qt_window/mainwindow.hh b/src/module/qt_window/mainwindow.hh index cb97f0e6..4d15fb87 100644 --- a/src/module/qt_window/mainwindow.hh +++ b/src/module/qt_window/mainwindow.hh @@ -15,4 +15,13 @@ public slots: inline void updateWindowTitle(QString str) noexcept { setWindowTitle(str); } + +signals: + void emitCloseMpv(bool*); + +private slots: + void __closeMpv(bool*); + +public: + void closeMpv(bool*) noexcept; }; diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh index cc99b82b..ed984318 100644 --- a/src/module/qt_window/mpvwidget.hh +++ b/src/module/qt_window/mpvwidget.hh @@ -10,7 +10,7 @@ class MpvWidget Q_DECL_FINAL : public QOpenGLWidget { Q_OBJECT public: MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, QWidget *parent); - virtual ~MpvWidget() override; + ~MpvWidget(); void command(const QVariant ¶ms); void setProperty(const QString &name, const QVariant &value); QVariant getProperty(const QString &name) const; diff --git a/src/module/qt_window/mpvwidget_interface.cc b/src/module/qt_window/mpvwidget_interface.cc index 26e963bc..2cea80bd 100644 --- a/src/module/qt_window/mpvwidget_interface.cc +++ b/src/module/qt_window/mpvwidget_interface.cc @@ -65,6 +65,10 @@ ___module_qt_window_toggle_pause(struct module_qt_window_s *win) bool ___module_qt_window_close(struct module_qt_window_s *win) { - delete(win->main_window); + bool exited = false; + win->main_window->closeMpv(&exited); + while (!exited) + sleep(1); + delete win->main_window; return true; } -- GitLab