From 042067e6c27fd7c25f053be0c5f88f5b7b50ccd8 Mon Sep 17 00:00:00 2001 From: Elliu <elliu@hashi.re> Date: Wed, 12 Jan 2022 22:07:06 +0100 Subject: [PATCH] Use regular pthread to run QApplication --- src/module/module_qt_window.cc | 8 ++------ src/module/qt_window/mainwindow.cc | 11 +++++------ src/module/qt_window/mainwindow.hh | 8 ++++---- src/module/qt_window/mpvwidget_interface.cc | 17 +++++++++-------- src/module/qt_window/mpvwidget_interface.hh | 2 +- 5 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/module/module_qt_window.cc b/src/module/module_qt_window.cc index 7b78f826..ae5d7890 100644 --- a/src/module/module_qt_window.cc +++ b/src/module/module_qt_window.cc @@ -189,7 +189,6 @@ module_qt_window_new(struct module_qt_window_s **win, struct queue *queue, lkt_d (void)mod_free; (void)mod_close; RETURN_UNLESS(win, "Invalid arguments", false); - struct poller_thread_arg *arg; if (*win == nullptr) { *win = LKT_ALLOC_STRUCT(module_qt_window_s); @@ -200,11 +199,8 @@ module_qt_window_new(struct module_qt_window_s **win, struct queue *queue, lkt_d (*win)->db = db; (*win)->reg = qt_window_reg; - arg = LKT_ALLOC_STRUCT(poller_thread_arg); - RETURN_UNLESS(arg, "Out of memory", false); - arg->args = *win; - RETURN_IF(poller_new(&(*win)->self, ___create_mpv_widget, arg), - "Failed to launch the SDL thread", false); + pthread_t thread; + RETURN_IF(pthread_create(&thread, nullptr, ___create_mpv_widget, *win), "Failed to launch the Qt thread", false); } return true; diff --git a/src/module/qt_window/mainwindow.cc b/src/module/qt_window/mainwindow.cc index 01b6a280..38eb490d 100644 --- a/src/module/qt_window/mainwindow.cc +++ b/src/module/qt_window/mainwindow.cc @@ -1,6 +1,6 @@ #include "mainwindow.hh" -MainWindow::MainWindow(struct module_qt_window_s *qt_window, QWidget *parent) +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); @@ -13,14 +13,13 @@ MainWindow::MainWindow(struct module_qt_window_s *qt_window, QWidget *parent) } void -MainWindow::closeMpv(bool *exited) noexcept +MainWindow::closeMpv() noexcept { - emit emitCloseMpv(exited); + emit emitCloseMpv(); } void -MainWindow::__closeMpv(bool *exited) +MainWindow::__closeMpv() { - delete centralWidget(); - *exited = true; + delete this; } diff --git a/src/module/qt_window/mainwindow.hh b/src/module/qt_window/mainwindow.hh index 6af91748..bec8b7b9 100644 --- a/src/module/qt_window/mainwindow.hh +++ b/src/module/qt_window/mainwindow.hh @@ -9,17 +9,17 @@ class MainWindow : public QMainWindow { Q_OBJECT public: - explicit MainWindow(struct module_qt_window_s *qt_window, QWidget *parent = nullptr); + explicit MainWindow(module_qt_window_s *qt_window, QWidget *parent = nullptr); public slots: inline void updateWindowTitle(QString str) noexcept { setWindowTitle(str); } signals: - void emitCloseMpv(bool *); + void emitCloseMpv(); private slots: - void __closeMpv(bool *); + void __closeMpv(); public: - void closeMpv(bool *) noexcept; + void closeMpv() noexcept; }; diff --git a/src/module/qt_window/mpvwidget_interface.cc b/src/module/qt_window/mpvwidget_interface.cc index aba2f6c1..d6873668 100644 --- a/src/module/qt_window/mpvwidget_interface.cc +++ b/src/module/qt_window/mpvwidget_interface.cc @@ -1,22 +1,25 @@ #include "mpvwidget_interface.hh" -#include "mainwindow.hh" #include <QApplication> +#include <QEventLoop> + +#include "mainwindow.hh" void * -___create_mpv_widget(struct poller_thread_arg *arg) +___create_mpv_widget(void *arg) { lkt_thread_set_name("lektord/qt-win"); /* Unsage reinterpret cast, but isok */ - struct module_qt_window_s *qt_window = reinterpret_cast<struct module_qt_window_s *>(arg->args); + module_qt_window_s *qt_window = reinterpret_cast<module_qt_window_s *>(arg); int argc = 0; - QApplication a(argc, nullptr); + QApplication app(argc, nullptr); setlocale(LC_NUMERIC, "C"); qt_window->main_window = new MainWindow(qt_window); qt_window->main_window->show(); - a.exec(); + app.exec(); + return nullptr; } @@ -65,8 +68,6 @@ ___module_qt_window_toggle_pause(struct module_qt_window_s *win) bool ___module_qt_window_close(struct module_qt_window_s *win) { - bool exited = false; - win->main_window->closeMpv(&exited); - delete win->main_window; + win->main_window->closeMpv(); return true; } diff --git a/src/module/qt_window/mpvwidget_interface.hh b/src/module/qt_window/mpvwidget_interface.hh index f79eca9a..0f953e56 100644 --- a/src/module/qt_window/mpvwidget_interface.hh +++ b/src/module/qt_window/mpvwidget_interface.hh @@ -3,7 +3,7 @@ #include <lektor/common.h> #include "../module_qt_window.hh" -void *___create_mpv_widget(struct poller_thread_arg *arg); +void *___create_mpv_widget(void *arg); bool ___module_qt_window_get_elapsed(struct module_qt_window_s *, int *); bool ___module_qt_window_get_duration(struct module_qt_window_s *, int *); -- GitLab