diff --git a/src/module/module_qt_window.cc b/src/module/module_qt_window.cc index 7eb7f57821ece06292600e7e174cb8901d170405..a1cb86d2d5cd3489abd37d5a4904f2dd49d7f392 100644 --- a/src/module/module_qt_window.cc +++ b/src/module/module_qt_window.cc @@ -214,12 +214,17 @@ module_qt_window_new(struct module_qt_window_s **win, struct queue *queue, lkt_d RETURN_UNLESS(*win, "Out of memory", false); memset(*win, 0, sizeof(struct module_qt_window_s)); - (*win)->queue = queue; - (*win)->db = db; + (*win)->queue = queue; + (*win)->db = db; + (*win)->launched = false; pthread_t thread; RETURN_IF(pthread_create(&thread, nullptr, ___create_mpv_widget, *win), "Failed to launch the Qt thread", false); + + timespec timeToWait = { 0, 10000000 }; + while (!(*win)->launched) + nanosleep(&timeToWait, nullptr); } return true; diff --git a/src/module/module_qt_window.hh b/src/module/module_qt_window.hh index 9ac0880714d3738700224fa8228a2f413992545a..760f16a2304d2446749a3ed86cdfba17e916103b 100644 --- a/src/module/module_qt_window.hh +++ b/src/module/module_qt_window.hh @@ -11,6 +11,7 @@ struct module_qt_window_s { MpvWidget *mpv_widget; struct module_reg *reg; + bool launched; /* Things from the server */ struct queue *queue; diff --git a/src/module/qt_window/mainwindow.cc b/src/module/qt_window/mainwindow.cc index 38eb490d825b9206721137e5acd1d9cd74d21044..4ac58feed292123fbe5dac01d17ed5babaf1a9e2 100644 --- a/src/module/qt_window/mainwindow.cc +++ b/src/module/qt_window/mainwindow.cc @@ -3,7 +3,8 @@ MainWindow::MainWindow(module_qt_window_s *qt_window, QWidget *parent) : QMainWindow(parent) { - qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, qt_window->reg, this); + qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, qt_window->reg, + &(qt_window->launched), this); connect(qt_window->mpv_widget, &MpvWidget::titleChanged, this, &MainWindow::updateWindowTitle); setCentralWidget(qt_window->mpv_widget); setFocusPolicy(Qt::StrongFocus); diff --git a/src/module/qt_window/mpvwidget.cc b/src/module/qt_window/mpvwidget.cc index e81597c39eee93bc4cc7ed0a225ae29790e439aa..be53b3caaa680c60849c87a5d1171855b3e90357 100644 --- a/src/module/qt_window/mpvwidget.cc +++ b/src/module/qt_window/mpvwidget.cc @@ -28,11 +28,13 @@ get_proc_address(void *ctx, const char *name) return reinterpret_cast<void *>(glctx->getProcAddress(QByteArray(name))); } -MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, QWidget *parent) +MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, bool *launched, + QWidget *parent) : QOpenGLWidget(parent) , m_queue(queue) , m_db(db) , m_reg(reg) + , m_launched(launched) { mpv = mpv_create(); if (!mpv) @@ -136,6 +138,7 @@ MpvWidget::handle_mpv_event(mpv_event *event) case MPV_EVENT_SHUTDOWN: lkt_queue_send(m_queue, LKT_EVENT_PLAY_TOGGLE, LKT_PLAY_STOP); + *m_launched = false; reg_call(m_reg, "close", 1); break; @@ -166,6 +169,7 @@ MpvWidget::handle_mpv_event(mpv_event *event) case MPV_EVENT_IDLE: lkt_queue_make_available(m_queue, static_cast<LKT_EVENT_TYPE>(LKT_EVENT_PLAY)); lkt_queue_make_available(m_queue, static_cast<LKT_EVENT_TYPE>(LKT_EVENT_PROP)); + *m_launched = true; emit titleChanged("[Lektord] Stopped"); break; diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh index 244bcc9c5eb4781f7848368bb06fbd38c3ce7d13..93aee66b32e66c160947c3b3c11a9a7b0e2785e4 100644 --- a/src/module/qt_window/mpvwidget.hh +++ b/src/module/qt_window/mpvwidget.hh @@ -9,7 +9,8 @@ class MpvWidget Q_DECL_FINAL : public QOpenGLWidget { Q_OBJECT public: - MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, QWidget *parent); + MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, bool *launched, + QWidget *parent); ~MpvWidget() override; void command(const QVariant ¶ms); void setProperty(const QString &name, const QVariant &value); @@ -36,6 +37,7 @@ private: struct queue *m_queue; lkt_db *m_db; struct module_reg *m_reg; + bool *m_launched; int m_position; int m_duration;