summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/blackberry/blackberry.pro8
-rw-r--r--src/plugins/platforms/blackberry/qbbbpseventfilter.cpp15
-rw-r--r--src/plugins/platforms/blackberry/qbbintegration.cpp27
3 files changed, 38 insertions, 12 deletions
diff --git a/src/plugins/platforms/blackberry/blackberry.pro b/src/plugins/platforms/blackberry/blackberry.pro
index 6fcef85..612fcab 100644
--- a/src/plugins/platforms/blackberry/blackberry.pro
+++ b/src/plugins/platforms/blackberry/blackberry.pro
@@ -4,6 +4,14 @@ include(../../qpluginbase.pri)
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
QT += opengl
+blackberry {
+ # Comment this to enable screen event
+ # handling through the event dispatcher.
+ DEFINES += QBB_SCREENEVENTTHREAD
+} else {
+ DEFINES += QBB_SCREENEVENTTHREAD
+}
+
SOURCES = main.cpp \
qbbbuffer.cpp \
qbbscreeneventthread.cpp \
diff --git a/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp b/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp
index a9e8523..c2d3693 100644
--- a/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp
+++ b/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp
@@ -96,12 +96,22 @@ void QBBBpsEventFilter::installOnEventDispatcher(QAbstractEventDispatcher *dispa
void QBBBpsEventFilter::registerForScreenEvents(QBBScreen *screen)
{
+ if (!mScreenEventHandler) {
+ qWarning("QBB: trying to register for screen events, but no handler provided");
+ return;
+ }
+
if (screen_request_events(screen->nativeContext()) != BPS_SUCCESS)
qWarning("QBB: failed to register for screen events on screen %p", screen->nativeContext());
}
void QBBBpsEventFilter::unregisterForScreenEvents(QBBScreen *screen)
{
+ if (!mScreenEventHandler) {
+ qWarning("QBB: trying to unregister for screen events, but no handler provided");
+ return;
+ }
+
if (screen_stop_events(screen->nativeContext()) != BPS_SUCCESS)
qWarning("QBB: failed to unregister for screen events on screen %p", screen->nativeContext());
}
@@ -127,6 +137,11 @@ bool QBBBpsEventFilter::bpsEventFilter(bps_event_t *event)
#endif
if (eventDomain == screen_get_domain()) {
+ if (!mScreenEventHandler) {
+ qWarning("QBB: registered for screen events, but no handler provided");
+ return false;
+ }
+
screen_event_t screenEvent = screen_event_get_event(event);
return mScreenEventHandler->handleEvent(screenEvent);
}
diff --git a/src/plugins/platforms/blackberry/qbbintegration.cpp b/src/plugins/platforms/blackberry/qbbintegration.cpp
index bfd1eb8..7371bd5 100644
--- a/src/plugins/platforms/blackberry/qbbintegration.cpp
+++ b/src/plugins/platforms/blackberry/qbbintegration.cpp
@@ -121,8 +121,7 @@ QBBIntegration::QBBIntegration() :
createDisplays();
// create/start event thread
- // Not on BlackBerry, it has specialised event dispatcher which also handles screen events
-#if !defined(Q_OS_BLACKBERRY)
+#if defined(QBB_SCREENEVENTTHREAD)
mScreenEventThread = new QBBScreenEventThread(mContext, mScreenEventHandler);
mScreenEventThread->start();
#endif
@@ -138,10 +137,14 @@ QBBIntegration::QBBIntegration() :
QBBVirtualKeyboardBps *virtualKeyboardBps = new QBBVirtualKeyboardBps;
- mBpsEventFilter = new QBBBpsEventFilter(mNavigatorEventHandler, mScreenEventHandler, virtualKeyboardBps);
- Q_FOREACH (QPlatformScreen *platformScreen, mScreens) {
- QBBScreen *screen = static_cast<QBBScreen*>(platformScreen);
- mBpsEventFilter->registerForScreenEvents(screen);
+ mBpsEventFilter = new QBBBpsEventFilter(mNavigatorEventHandler,
+ (mScreenEventThread ? 0 : mScreenEventHandler), virtualKeyboardBps);
+
+ if (!mScreenEventThread) {
+ Q_FOREACH (QPlatformScreen *platformScreen, mScreens) {
+ QBBScreen *screen = static_cast<QBBScreen*>(platformScreen);
+ mBpsEventFilter->registerForScreenEvents(screen);
+ }
}
mBpsEventFilter->installOnEventDispatcher(QAbstractEventDispatcher::instance());
@@ -178,20 +181,20 @@ QBBIntegration::~QBBIntegration()
delete mLocaleThread;
#endif
-#if !defined(Q_OS_BLACKBERRY)
+#if defined(QBB_SCREENEVENTTHREAD)
// stop/destroy event thread
delete mScreenEventThread;
+#elif defined(Q_OS_BLACKBERRY)
+ Q_FOREACH (QPlatformScreen *platformScreen, mScreens) {
+ QBBScreen *screen = static_cast<QBBScreen*>(platformScreen);
+ mBpsEventFilter->unregisterForScreenEvents(screen);
+ }
#endif
// stop/destroy navigator event handling classes
delete mNavigatorEventNotifier;
#if defined(Q_OS_BLACKBERRY)
- Q_FOREACH (QPlatformScreen *platformScreen, mScreens) {
- QBBScreen *screen = static_cast<QBBScreen*>(platformScreen);
- mBpsEventFilter->unregisterForScreenEvents(screen);
- }
-
delete mBpsEventFilter;
#endif