aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/glib_mainloop_on_qeventloop.h
diff options
context:
space:
mode:
Diffstat (limited to 'ui/qt/glib_mainloop_on_qeventloop.h')
-rw-r--r--ui/qt/glib_mainloop_on_qeventloop.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/ui/qt/glib_mainloop_on_qeventloop.h b/ui/qt/glib_mainloop_on_qeventloop.h
new file mode 100644
index 0000000000..9f66c68164
--- /dev/null
+++ b/ui/qt/glib_mainloop_on_qeventloop.h
@@ -0,0 +1,57 @@
+/** @file
+ *
+ * Copyright 2022 Tomasz Mon <desowin@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef GLIB_MAINLOOP_ON_QEVENTLOOP_H
+#define GLIB_MAINLOOP_ON_QEVENTLOOP_H
+
+#include <QThread>
+#include <QMutex>
+#include <QWaitCondition>
+#include <glib.h>
+
+class GLibPoller : public QThread
+{
+ Q_OBJECT
+
+protected:
+ explicit GLibPoller(GMainContext *context);
+ ~GLibPoller();
+
+ void run() override;
+
+ QMutex mutex_;
+ QWaitCondition dispatched_;
+ GMainContext *ctx_;
+ gint priority_;
+ GPollFD *fds_;
+ gint allocated_fds_, nfds_;
+
+signals:
+ void polled(void);
+
+ friend class GLibMainloopOnQEventLoop;
+};
+
+class GLibMainloopOnQEventLoop : public QObject
+{
+ Q_OBJECT
+
+protected:
+ explicit GLibMainloopOnQEventLoop(QObject *parent);
+ ~GLibMainloopOnQEventLoop();
+
+protected slots:
+ void checkAndDispatch();
+
+public:
+ static void setup(QObject *parent);
+
+protected:
+ GLibPoller poller_;
+};
+
+#endif /* GLIB_MAINLOOP_ON_QEVENTLOOP_H */