diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/qnx/qnx.pro | 6 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxbpseventfilter.cpp | 29 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxbpseventfilter.h | 10 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxintegration.cpp | 32 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxintegration.h | 4 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxscreeneventthread.cpp (renamed from src/plugins/platforms/qnx/qqnxeventthread.cpp) | 45 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxscreeneventthread.h (renamed from src/plugins/platforms/qnx/qqnxeventthread.h) | 12 |
7 files changed, 88 insertions, 50 deletions
diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro index 48738a5dee..c218b5e86e 100644 --- a/src/plugins/platforms/qnx/qnx.pro +++ b/src/plugins/platforms/qnx/qnx.pro @@ -22,7 +22,7 @@ CONFIG(blackberry) { #DEFINES += QQNXBUFFER_DEBUG #DEFINES += QQNXBPSEVENTFILTER_DEBUG #DEFINES += QQNXCLIPBOARD_DEBUG -#DEFINES += QQNXEVENTTHREAD_DEBUG +#DEFINES += QQNXSCREENEVENTTHREAD_DEBUG #DEFINES += QQNXGLBACKINGSTORE_DEBUG #DEFINES += QQNXGLCONTEXT_DEBUG #DEFINES += QQNXINPUTCONTEXT_DEBUG @@ -40,7 +40,7 @@ CONFIG(blackberry) { SOURCES = main.cpp \ qqnxbuffer.cpp \ - qqnxeventthread.cpp \ + qqnxscreeneventthread.cpp \ qqnxintegration.cpp \ qqnxscreen.cpp \ qqnxwindow.cpp \ @@ -55,7 +55,7 @@ SOURCES = main.cpp \ HEADERS = main.h \ qqnxbuffer.h \ - qqnxeventthread.h \ + qqnxscreeneventthread.h \ qqnxkeytranslator.h \ qqnxintegration.h \ qqnxscreen.h \ diff --git a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp index d1db0665bf..c4e6f2b781 100644 --- a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp +++ b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp @@ -40,18 +40,22 @@ ****************************************************************************/ #include "qqnxbpseventfilter.h" +#include "qqnxscreen.h" +#include "qqnxscreeneventhandler.h" #include <QAbstractEventDispatcher> #include <QDebug> #include <bps/event.h> +#include <bps/screen.h> QT_BEGIN_NAMESPACE static QQnxBpsEventFilter *s_instance = 0; -QQnxBpsEventFilter::QQnxBpsEventFilter(QObject *parent) +QQnxBpsEventFilter::QQnxBpsEventFilter(QQnxScreenEventHandler *screenEventHandler, QObject *parent) : QObject(parent) + , m_screenEventHandler(screenEventHandler) { Q_ASSERT(s_instance == 0); @@ -80,6 +84,18 @@ void QQnxBpsEventFilter::installOnEventDispatcher(QAbstractEventDispatcher *disp Q_UNUSED(previousEventFilter); } +void QQnxBpsEventFilter::registerForScreenEvents(QQnxScreen *screen) +{ + if (screen_request_events(screen->nativeContext()) != BPS_SUCCESS) + qWarning("QQNX: failed to register for screen events on screen %p", screen->nativeContext()); +} + +void QQnxBpsEventFilter::unregisterForScreenEvents(QQnxScreen *screen) +{ + if (screen_stop_events(screen->nativeContext()) != BPS_SUCCESS) + qWarning("QQNX: failed to unregister for screen events on screen %p", screen->nativeContext()); +} + bool QQnxBpsEventFilter::dispatcherEventFilter(void *message) { #if defined(QQNXBPSEVENTFILTER_DEBUG) @@ -95,12 +111,17 @@ bool QQnxBpsEventFilter::dispatcherEventFilter(void *message) bool QQnxBpsEventFilter::bpsEventFilter(bps_event_t *event) { + const int eventDomain = bps_event_get_domain(event); + #if defined(QQNXBPSEVENTFILTER_DEBUG) - qDebug() << Q_FUNC_INFO << "event=" << event << "domain=" << bps_event_get_domain(event); -#else - Q_UNUSED(event); + qDebug() << Q_FUNC_INFO << "event=" << event << "domain=" << eventDomain; #endif + if (eventDomain == screen_get_domain()) { + screen_event_t screenEvent = screen_event_get_event(event); + return m_screenEventHandler->handleEvent(screenEvent); + } + return false; } diff --git a/src/plugins/platforms/qnx/qqnxbpseventfilter.h b/src/plugins/platforms/qnx/qqnxbpseventfilter.h index f03ea8e837..1c08f13beb 100644 --- a/src/plugins/platforms/qnx/qqnxbpseventfilter.h +++ b/src/plugins/platforms/qnx/qqnxbpseventfilter.h @@ -49,19 +49,27 @@ struct bps_event_t; QT_BEGIN_NAMESPACE class QAbstractEventDispatcher; +class QQnxScreen; +class QQnxScreenEventHandler; class QQnxBpsEventFilter : public QObject { Q_OBJECT public: - explicit QQnxBpsEventFilter(QObject *parent = 0); + explicit QQnxBpsEventFilter(QQnxScreenEventHandler *screenEventHandler, QObject *parent = 0); ~QQnxBpsEventFilter(); void installOnEventDispatcher(QAbstractEventDispatcher *dispatcher); + void registerForScreenEvents(QQnxScreen *screen); + void unregisterForScreenEvents(QQnxScreen *screen); + private: static bool dispatcherEventFilter(void *message); bool bpsEventFilter(bps_event_t *event); + +private: + QQnxScreenEventHandler *m_screenEventHandler; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp index b3c39498d4..54aa311a58 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.cpp +++ b/src/plugins/platforms/qnx/qqnxintegration.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include "qqnxintegration.h" -#include "qqnxeventthread.h" +#include "qqnxscreeneventthread.h" #include "qqnxnativeinterface.h" #include "qqnxrasterbackingstore.h" #include "qqnxscreen.h" @@ -100,7 +100,7 @@ QMutex QQnxIntegration::ms_windowMapperMutex; QQnxIntegration::QQnxIntegration() : QPlatformIntegration() - , m_eventThread(0) + , m_screenEventThread(0) , m_navigatorEventHandler(new QQnxNavigatorEventHandler()) , m_virtualKeyboard(0) #if defined(QQNX_PPS) @@ -152,8 +152,11 @@ QQnxIntegration::QQnxIntegration() #endif // Create/start event thread - m_eventThread = new QQnxEventThread(m_screenContext, m_screenEventHandler); - m_eventThread->start(); + // Not on BlackBerry, it has specialised event dispatcher which also handles screen events +#if !defined(Q_OS_BLACKBERRY) + m_screenEventThread = new QQnxScreenEventThread(m_screenContext, m_screenEventHandler); + m_screenEventThread->start(); +#endif #if defined(QQNX_PPS) // Create/start the keyboard class. @@ -182,7 +185,10 @@ QQnxIntegration::QQnxIntegration() m_services = new QQnxServices(m_navigator); #if defined(Q_OS_BLACKBERRY) - m_bpsEventFilter = new QQnxBpsEventFilter; + m_bpsEventFilter = new QQnxBpsEventFilter(m_screenEventHandler); + Q_FOREACH (QQnxScreen *screen, m_screens) + m_bpsEventFilter->registerForScreenEvents(screen); + m_bpsEventFilter->installOnEventDispatcher(m_eventDispatcher); #endif @@ -216,8 +222,16 @@ QQnxIntegration::~QQnxIntegration() #endif delete m_navigatorEventHandler; - // Stop/destroy event thread - delete m_eventThread; +#if !defined(Q_OS_BLACKBERRY) + // Stop/destroy screen event thread + delete m_screenEventThread; +#else + Q_FOREACH (QQnxScreen *screen, m_screens) + m_bpsEventFilter->unregisterForScreenEvents(screen); + + delete m_bpsEventFilter; +#endif + delete m_screenEventHandler; // Destroy all displays @@ -237,10 +251,6 @@ QQnxIntegration::~QQnxIntegration() // Destroy navigator interface delete m_navigator; -#if defined(Q_OS_BLACKBERRY) - delete m_bpsEventFilter; -#endif - #if defined(QQNXINTEGRATION_DEBUG) qDebug() << "QQnx: platform plugin shutdown end"; #endif diff --git a/src/plugins/platforms/qnx/qqnxintegration.h b/src/plugins/platforms/qnx/qqnxintegration.h index 538892e9fb..a3c476f16e 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.h +++ b/src/plugins/platforms/qnx/qqnxintegration.h @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE class QQnxBpsEventFilter; -class QQnxEventThread; +class QQnxScreenEventThread; class QQnxNativeInterface; class QQnxWindow; class QQnxScreen; @@ -123,7 +123,7 @@ private: static void removeWindow(screen_window_t qnxWindow); screen_context_t m_screenContext; - QQnxEventThread *m_eventThread; + QQnxScreenEventThread *m_screenEventThread; QQnxNavigatorEventHandler *m_navigatorEventHandler; QQnxAbstractVirtualKeyboard *m_virtualKeyboard; #if defined(QQNX_PPS) diff --git a/src/plugins/platforms/qnx/qqnxeventthread.cpp b/src/plugins/platforms/qnx/qqnxscreeneventthread.cpp index 768d508add..a3e50dc8da 100644 --- a/src/plugins/platforms/qnx/qqnxeventthread.cpp +++ b/src/plugins/platforms/qnx/qqnxscreeneventthread.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include "qqnxeventthread.h" +#include "qqnxscreeneventthread.h" #include "qqnxscreeneventhandler.h" #include <QtCore/QDebug> @@ -49,8 +49,7 @@ #include <cctype> -QQnxEventThread::QQnxEventThread(screen_context_t context, - QQnxScreenEventHandler *screenEventHandler) +QQnxScreenEventThread::QQnxScreenEventThread(screen_context_t context, QQnxScreenEventHandler *screenEventHandler) : QThread(), m_screenContext(context), m_screenEventHandler(screenEventHandler), @@ -58,18 +57,18 @@ QQnxEventThread::QQnxEventThread(screen_context_t context, { } -QQnxEventThread::~QQnxEventThread() +QQnxScreenEventThread::~QQnxScreenEventThread() { // block until thread terminates shutdown(); } -void QQnxEventThread::injectKeyboardEvent(int flags, int sym, int mod, int scan, int cap) +void QQnxScreenEventThread::injectKeyboardEvent(int flags, int sym, int mod, int scan, int cap) { QQnxScreenEventHandler::injectKeyboardEvent(flags, sym, mod, scan, cap); } -void QQnxEventThread::run() +void QQnxScreenEventThread::run() { screen_event_t event; @@ -77,10 +76,10 @@ void QQnxEventThread::run() errno = 0; int result = screen_create_event(&event); if (result) - qFatal("QQNX: failed to create event, errno=%d", errno); + qFatal("QQNX: failed to create screen event, errno=%d", errno); -#if defined(QQNXEVENTTHREAD_DEBUG) - qDebug() << "QQNX: event loop started"; +#if defined(QQNXSCREENEVENTTHREAD_DEBUG) + qDebug() << "QQNX: screen event thread started"; #endif // loop indefinitely @@ -90,7 +89,7 @@ void QQnxEventThread::run() errno = 0; result = screen_get_event(m_screenContext, event, -1); if (result) - qFatal("QQNX: failed to get event, errno=%d", errno); + qFatal("QQNX: failed to get screen event, errno=%d", errno); // process received event // get the event type @@ -98,12 +97,12 @@ void QQnxEventThread::run() int qnxType; result = screen_get_event_property_iv(event, SCREEN_PROPERTY_TYPE, &qnxType); if (result) - qFatal("QQNX: failed to query event type, errno=%d", errno); + qFatal("QQNX: failed to query screen event type, errno=%d", errno); if (qnxType == SCREEN_EVENT_USER) { // treat all user events as shutdown requests - #if defined(QQNXEVENTTHREAD_DEBUG) - qDebug() << "QQNX: QNX user event"; + #if defined(QQNXSCREENEVENTTHREAD_DEBUG) + qDebug() << "QQNX: QNX user screen event"; #endif m_quit = true; } else { @@ -111,15 +110,15 @@ void QQnxEventThread::run() } } -#if defined(QQNXEVENTTHREAD_DEBUG) - qDebug() << "QQNX: event loop stopped"; +#if defined(QQNXSCREENEVENTTHREAD_DEBUG) + qDebug() << "QQNX: screen event thread stopped"; #endif // cleanup screen_destroy_event(event); } -void QQnxEventThread::shutdown() +void QQnxScreenEventThread::shutdown() { screen_event_t event; @@ -127,14 +126,14 @@ void QQnxEventThread::shutdown() errno = 0; int result = screen_create_event(&event); if (result) - qFatal("QQNX: failed to create event, errno=%d", errno); + qFatal("QQNX: failed to create screen event, errno=%d", errno); // set the event type as user errno = 0; int type = SCREEN_EVENT_USER; result = screen_set_event_property_iv(event, SCREEN_PROPERTY_TYPE, &type); if (result) - qFatal("QQNX: failed to set event type, errno=%d", errno); + qFatal("QQNX: failed to set screen event type, errno=%d", errno); // NOTE: ignore SCREEN_PROPERTY_USER_DATA; treat all user events as shutdown events @@ -142,19 +141,19 @@ void QQnxEventThread::shutdown() errno = 0; result = screen_send_event(m_screenContext, event, getpid()); if (result) - qFatal("QQNX: failed to set event type, errno=%d", errno); + qFatal("QQNX: failed to set screen event type, errno=%d", errno); // cleanup screen_destroy_event(event); -#if defined(QQNXEVENTTHREAD_DEBUG) - qDebug() << "QQNX: event loop shutdown begin"; +#if defined(QQNXSCREENEVENTTHREAD_DEBUG) + qDebug() << "QQNX: screen event thread shutdown begin"; #endif // block until thread terminates wait(); -#if defined(QQNXEVENTTHREAD_DEBUG) - qDebug() << "QQNX: event loop shutdown end"; +#if defined(QQNXSCREENEVENTTHREAD_DEBUG) + qDebug() << "QQNX: screen event thread shutdown end"; #endif } diff --git a/src/plugins/platforms/qnx/qqnxeventthread.h b/src/plugins/platforms/qnx/qqnxscreeneventthread.h index aa6186aa0d..4f41e67940 100644 --- a/src/plugins/platforms/qnx/qqnxeventthread.h +++ b/src/plugins/platforms/qnx/qqnxscreeneventthread.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QQNXEVENTTHREAD_H -#define QQNXEVENTTHREAD_H +#ifndef QQNXSCREENEVENTTHREAD_H +#define QQNXSCREENEVENTTHREAD_H #include <QtCore/QThread> @@ -50,11 +50,11 @@ QT_BEGIN_NAMESPACE class QQnxScreenEventHandler; -class QQnxEventThread : public QThread +class QQnxScreenEventThread : public QThread { public: - QQnxEventThread(screen_context_t context, QQnxScreenEventHandler *screenEventHandler); - virtual ~QQnxEventThread(); + QQnxScreenEventThread(screen_context_t context, QQnxScreenEventHandler *screenEventHandler); + ~QQnxScreenEventThread(); static void injectKeyboardEvent(int flags, int sym, int mod, int scan, int cap); @@ -71,4 +71,4 @@ private: QT_END_NAMESPACE -#endif // QQNXEVENTTHREAD_H +#endif // QQNXSCREENEVENTTHREAD_H |