summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/qnx/qnx.pro6
-rw-r--r--src/plugins/platforms/qnx/qqnxbpseventfilter.cpp15
-rw-r--r--src/plugins/platforms/qnx/qqnxintegration.cpp14
3 files changed, 29 insertions, 6 deletions
diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro
index 7c25707fa4..c38379734b 100644
--- a/src/plugins/platforms/qnx/qnx.pro
+++ b/src/plugins/platforms/qnx/qnx.pro
@@ -16,6 +16,12 @@ contains(QT_CONFIG, opengles2) {
CONFIG(blackberry) {
CONFIG += qqnx_pps
+
+ # Comment this to enable screen event handling
+ # through the event dispatcher.
+ DEFINES += QQNX_SCREENEVENTTHREAD
+} else {
+ DEFINES += QQNX_SCREENEVENTTHREAD
}
# Uncomment these to enable debugging output for various aspects of the plugin
diff --git a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp
index fd1bfd333e..93bb2d3584 100644
--- a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp
+++ b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp
@@ -101,12 +101,22 @@ void QQnxBpsEventFilter::installOnEventDispatcher(QAbstractEventDispatcher *disp
void QQnxBpsEventFilter::registerForScreenEvents(QQnxScreen *screen)
{
+ if (!m_screenEventHandler) {
+ qWarning("QQNX: trying to register for screen events, but no handler provided.");
+ return;
+ }
+
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 (!m_screenEventHandler) {
+ qWarning("QQNX: trying to unregister for screen events, but no handler provided.");
+ return;
+ }
+
if (screen_stop_events(screen->nativeContext()) != BPS_SUCCESS)
qWarning("QQNX: failed to unregister for screen events on screen %p", screen->nativeContext());
}
@@ -144,6 +154,11 @@ bool QQnxBpsEventFilter::bpsEventFilter(bps_event_t *event)
qBpsEventFilterDebug() << Q_FUNC_INFO << "event=" << event << "domain=" << eventDomain;
if (eventDomain == screen_get_domain()) {
+ if (!m_screenEventHandler) {
+ qWarning("QQNX: registered for screen events, but no handler provided.");
+ return false;
+ }
+
screen_event_t screenEvent = screen_event_get_event(event);
return m_screenEventHandler->handleEvent(screenEvent);
}
diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp
index eb95f2d1bd..f20fb6011f 100644
--- a/src/plugins/platforms/qnx/qqnxintegration.cpp
+++ b/src/plugins/platforms/qnx/qqnxintegration.cpp
@@ -156,8 +156,7 @@ QQnxIntegration::QQnxIntegration()
#endif
// Create/start event thread
- // Not on BlackBerry, it has specialised event dispatcher which also handles screen events
-#if !defined(Q_OS_BLACKBERRY)
+#if defined(QQNX_SCREENEVENTTHREAD)
m_screenEventThread = new QQnxScreenEventThread(m_screenContext, m_screenEventHandler);
m_screenEventThread->start();
#endif
@@ -184,7 +183,8 @@ QQnxIntegration::QQnxIntegration()
#if defined(Q_OS_BLACKBERRY)
QQnxVirtualKeyboardBps* virtualKeyboardBps = new QQnxVirtualKeyboardBps;
- m_bpsEventFilter = new QQnxBpsEventFilter(m_navigatorEventHandler, m_screenEventHandler, virtualKeyboardBps);
+ m_bpsEventFilter = new QQnxBpsEventFilter(m_navigatorEventHandler,
+ (m_screenEventThread ? 0 : m_screenEventHandler), virtualKeyboardBps);
m_bpsEventFilter->installOnEventDispatcher(m_eventDispatcher);
m_virtualKeyboard = virtualKeyboardBps;
@@ -198,7 +198,7 @@ QQnxIntegration::QQnxIntegration()
// create the displays first.
createDisplays();
-#if defined(Q_OS_BLACKBERRY)
+#if !defined(QQNX_SCREENEVENTTHREAD) && defined(Q_OS_BLACKBERRY)
// Register for screen domain events with bps
Q_FOREACH (QQnxScreen *screen, m_screens)
m_bpsEventFilter->registerForScreenEvents(screen);
@@ -241,13 +241,15 @@ QQnxIntegration::~QQnxIntegration()
#endif
delete m_navigatorEventHandler;
-#if !defined(Q_OS_BLACKBERRY)
+#if defined(QQNX_SCREENEVENTTHREAD)
// Stop/destroy screen event thread
delete m_screenEventThread;
-#else
+#elif defined(Q_OS_BLACKBERRY)
Q_FOREACH (QQnxScreen *screen, m_screens)
m_bpsEventFilter->unregisterForScreenEvents(screen);
+#endif
+#if defined(Q_OS_BLACKBERRY)
delete m_bpsEventFilter;
#endif