diff options
author | James McDonnell <jmcdonnell@blackberry.com> | 2018-04-26 12:33:13 -0400 |
---|---|---|
committer | James McDonnell <jmcdonnell@blackberry.com> | 2018-05-04 14:20:56 +0000 |
commit | fc356a1992753059be34929959ed252e19ff5c7a (patch) | |
tree | ac26c6ea8f7eede9308aa3f844b10053208661c3 /src/plugins/platforms/qnx/qqnxscreeneventthread.h | |
parent | 1e9da7b3fd06dd3edd642d0f6479199b5174c928 (diff) |
QNX: Move screen event retrieval to the GUI thread
Instead of retrieving screen events itself, the screen event thread
now turns screen event notification into a Qt signal. In response to
the signal, the GUI thread processes screen events. Eliminates the
need to coordinate access to a screen event queue. Also prepares the
way for getting rid of the screen event thread. This could be done if
the QNX event dispatcher were switched from poll to MsgReceive
(dispatch).
Change-Id: If5892466d04d67f00828fddaea38b20da5fb18a3
Reviewed-by: Janne Koskinen <janne.p.koskinen@qt.io>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Diffstat (limited to 'src/plugins/platforms/qnx/qqnxscreeneventthread.h')
-rw-r--r-- | src/plugins/platforms/qnx/qqnxscreeneventthread.h | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/src/plugins/platforms/qnx/qqnxscreeneventthread.h b/src/plugins/platforms/qnx/qqnxscreeneventthread.h index 140f53aa50..3c8d197545 100644 --- a/src/plugins/platforms/qnx/qqnxscreeneventthread.h +++ b/src/plugins/platforms/qnx/qqnxscreeneventthread.h @@ -1,5 +1,6 @@ /*************************************************************************** ** +** Copyright (C) 2017 QNX Software Systems. All rights reserved. ** Copyright (C) 2011 - 2012 Research In Motion ** Contact: https://www.qt.io/licensing/ ** @@ -47,37 +48,34 @@ QT_BEGIN_NAMESPACE -class QQnxScreenEventHandler; - -typedef QVarLengthArray<screen_event_t, 64> QQnxScreenEventArray; - class QQnxScreenEventThread : public QThread { Q_OBJECT public: - QQnxScreenEventThread(screen_context_t context, QQnxScreenEventHandler *screenEventHandler); + QQnxScreenEventThread(screen_context_t context); ~QQnxScreenEventThread(); - static void injectKeyboardEvent(int flags, int sym, int mod, int scan, int cap); - - QQnxScreenEventArray *lock(); - void unlock(); + screen_context_t context() const { return m_screenContext; } + void armEventsPending(int count); protected: void run() override; Q_SIGNALS: - void eventPending(); + void eventsPending(); private: + void handleScreenPulse(const struct _pulse &msg); + void handleArmPulse(const struct _pulse &msg); + void handlePulse(const struct _pulse &msg); void shutdown(); + int m_channelId; + int m_connectionId; screen_context_t m_screenContext; - QMutex m_mutex; - QQnxScreenEventArray m_events; - QQnxScreenEventHandler *m_screenEventHandler; - bool m_quit; + bool m_emitNeededOnNextScreenPulse = true; + int m_screenPulsesSinceLastArmPulse = 0; }; QT_END_NAMESPACE |