diff options
-rw-r--r-- | src/plugins/platforms/blackberry/blackberry.pro | 8 | ||||
-rw-r--r-- | src/plugins/platforms/blackberry/qbbbpseventfilter.cpp | 15 | ||||
-rw-r--r-- | src/plugins/platforms/blackberry/qbbintegration.cpp | 27 |
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 |