From 24f66e15d8f6edb1b977e9d825c130a612baa097 Mon Sep 17 00:00:00 2001
From: Elliu <elliu@hashi.re>
Date: Thu, 23 Dec 2021 16:38:33 +0100
Subject: [PATCH] Add a MainWindow to have mouse and keyboard passed to MPV

---
 CMakeLists.txt                               |  1 +
 src/module/module_qt_window.h                |  8 ++++++--
 src/module/qt_window/mainwindow.cpp          |  7 +++++++
 src/module/qt_window/mainwindow.hh           | 17 +++++++++++++++++
 src/module/qt_window/mpvwidget.cpp           |  4 ++--
 src/module/qt_window/mpvwidget.hh            |  2 +-
 src/module/qt_window/mpvwidget_interface.cpp |  5 ++---
 7 files changed, 36 insertions(+), 8 deletions(-)
 create mode 100644 src/module/qt_window/mainwindow.cpp
 create mode 100644 src/module/qt_window/mainwindow.hh

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e9cfd55..0e9a04eb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -151,6 +151,7 @@ set(lektor_module_SOURCES
     src/module/qt_window/mpvwidget.cpp
     src/module/qt_window/mpvwidget_interface.cpp
     src/module/qt_window/qthelper.cpp
+    src/module/qt_window/mainwindow.cpp
     src/module/thread.c
 )
 
diff --git a/src/module/module_qt_window.h b/src/module/module_qt_window.h
index acdd44d9..7cc63cb5 100644
--- a/src/module/module_qt_window.h
+++ b/src/module/module_qt_window.h
@@ -3,15 +3,19 @@
 
 #if defined( __cplusplus)
 extern "C" {
-class MpvWidget;
+#define DECLARE_CPP_CLASS(c) class c;
 #else
-typedef struct MpvWidget MpvWidget;
+#define DECLARE_CPP_CLASS(c) typedef struct c c;
 #endif
+DECLARE_CPP_CLASS(MpvWidget)
+DECLARE_CPP_CLASS(MainWindow)
+#undef DECLARE_CPP_CLASS
 
 #include <lektor/common.h>
 #include "thread.h"
 
 struct module_qt_window_s {
+    MainWindow* main_window;
     MpvWidget* mpv_widget;
 
     /* Thread related */
diff --git a/src/module/qt_window/mainwindow.cpp b/src/module/qt_window/mainwindow.cpp
new file mode 100644
index 00000000..46e56c04
--- /dev/null
+++ b/src/module/qt_window/mainwindow.cpp
@@ -0,0 +1,7 @@
+#include "mainwindow.hh"
+
+MainWindow::MainWindow(struct module_qt_window_s* qt_window, QWidget *parent) :
+    QMainWindow(parent)
+{
+    qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, this);
+}
diff --git a/src/module/qt_window/mainwindow.hh b/src/module/qt_window/mainwindow.hh
new file mode 100644
index 00000000..ad3e5142
--- /dev/null
+++ b/src/module/qt_window/mainwindow.hh
@@ -0,0 +1,17 @@
+#ifndef __LKT_MODULE_QT_WINDOW_MAINWINDOW__
+#define __LKT_MODULE_QT_WINDOW_MAINWINDOW__
+
+#include <QtWidgets/QWidget>
+#include <QtGui>
+#include <QMainWindow>
+#include "../module_qt_window.h"
+#include "mpvwidget.hh"
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+public:
+    explicit MainWindow(struct module_qt_window_s *qt_window, QWidget *parent = 0);
+};
+
+#endif // __LKT_MODULE_QT_WINDOW_MAINWINDOW__
diff --git a/src/module/qt_window/mpvwidget.cpp b/src/module/qt_window/mpvwidget.cpp
index 64c89e59..558674b6 100644
--- a/src/module/qt_window/mpvwidget.cpp
+++ b/src/module/qt_window/mpvwidget.cpp
@@ -20,8 +20,8 @@ static void *get_proc_address(void *ctx, const char *name) {
     return reinterpret_cast<void *>(glctx->getProcAddress(QByteArray(name)));
 }
 
-MpvWidget::MpvWidget(struct queue *queue, lkt_db *db)
-    : QOpenGLWidget(),
+MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, QWidget* parent)
+    : QOpenGLWidget(parent),
     m_queue(queue),
     m_db(db)
 {
diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh
index 0c0f91d6..86ea4662 100644
--- a/src/module/qt_window/mpvwidget.hh
+++ b/src/module/qt_window/mpvwidget.hh
@@ -14,7 +14,7 @@ class MpvWidget Q_DECL_FINAL: public QOpenGLWidget
 {
     Q_OBJECT
 public:
-    MpvWidget(struct queue *queue, lkt_db *db);
+    MpvWidget(struct queue *queue, lkt_db *db, QWidget* parent);
     ~MpvWidget();
     void command(const QVariant& params);
     void setProperty(const QString& name, const QVariant& value);
diff --git a/src/module/qt_window/mpvwidget_interface.cpp b/src/module/qt_window/mpvwidget_interface.cpp
index 56c9af81..8067387a 100644
--- a/src/module/qt_window/mpvwidget_interface.cpp
+++ b/src/module/qt_window/mpvwidget_interface.cpp
@@ -1,5 +1,5 @@
 #include "mpvwidget_interface.h"
-#include "mpvwidget.hh"
+#include "mainwindow.hh"
 
 #include <QApplication>
 
@@ -12,8 +12,7 @@ ___create_mpv_widget(struct poller_thread_arg *arg){
     int argc = 0;
     QApplication a(argc, NULL);
     setlocale(LC_NUMERIC, "C");
-    qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db);
-    qt_window->mpv_widget->show();
+    qt_window->main_window = new MainWindow(qt_window);
     a.exec();
     return NULL;
 }
-- 
GitLab