summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/minimaldfb/qdirectfbinput.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/minimaldfb/qdirectfbinput.h')
-rw-r--r--src/plugins/platforms/minimaldfb/qdirectfbinput.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/plugins/platforms/minimaldfb/qdirectfbinput.h b/src/plugins/platforms/minimaldfb/qdirectfbinput.h
new file mode 100644
index 0000000..31aa082
--- /dev/null
+++ b/src/plugins/platforms/minimaldfb/qdirectfbinput.h
@@ -0,0 +1,63 @@
+#ifndef QDIRECTFBINPUT_H
+#define QDIRECTFBINPUT_H
+
+#include <QThread>
+#include <QMutex>
+#include <QWaitCondition>
+#include <QObject>
+#include <QHash>
+#include <QPoint>
+#include <QEvent>
+
+#include <directfb.h>
+
+class InputSocketWaiter : public QThread
+{
+ Q_OBJECT
+public:
+ InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent);
+ virtual ~InputSocketWaiter();
+ void continueWaitingForEvents();
+protected:
+ void run();
+signals:
+ void newEvent();
+private:
+ IDirectFBEventBuffer *m_eventBuffer;
+ bool m_shouldStop;
+ QMutex m_cleanupMutex;
+ QWaitCondition m_finishedProcessingEvents;
+};
+
+class QDirectFbInput : public QObject
+{
+ Q_OBJECT
+public:
+ static QDirectFbInput *instance();
+ void addWindow(DFBWindowID id, QWidget *tlw);
+ void removeWindow(QWidget *tlw);
+
+public slots:
+ void handleEvents();
+ void applicationEnd();
+
+private:
+ QDirectFbInput();
+
+ void handleMouseEvents(const DFBEvent &event);
+ void handleWheelEvent(const DFBEvent &event);
+ void handleKeyEvents(const DFBEvent &event);
+ void handleEnterLeaveEvents(const DFBEvent &event);
+ IDirectFB *dfbInterface;
+ IDirectFBDisplayLayer *dfbDisplayLayer;
+ IDirectFBEventBuffer *eventBuffer;
+
+ QHash<DFBWindowID,QWidget *>tlwMap;
+
+ inline QPoint globalPoint(const DFBEvent &event) const;
+
+ InputSocketWaiter *m_inputHandler;
+
+};
+
+#endif // QDIRECTFBINPUT_H