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 &params);
     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