diff --git a/src/module/qt_window/mainwindow.cc b/src/module/qt_window/mainwindow.cc
index 0ad17a8a4a8e9d0a039c113e43402231ce5b6fbc..29c1aa38e2b0a65be420fe49bb7cf42ef742d8db 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 cb97f0e690e014aed7e4c12b41f47a30a929994e..4d15fb87ce377a8b361bf6d3c908ddf0ce26393c 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 cc99b82b0094da07fb5118e4abe81adb47079178..ed98431849a76f8804f7012a75df08d7e5a425d8 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 26e963bca7efb7e3a9288ec211a3fee08a9c2e0c..2cea80bd12cef74e1a3bd4d68de78d6574e3774f 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;
 }