summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/blackberry/blackberry.pro4
-rw-r--r--src/plugins/platforms/blackberry/qbbbpseventfilter.cpp29
-rw-r--r--src/plugins/platforms/blackberry/qbbbpseventfilter.h10
-rw-r--r--src/plugins/platforms/blackberry/qbbintegration.cpp29
-rw-r--r--src/plugins/platforms/blackberry/qbbintegration.h4
-rw-r--r--src/plugins/platforms/blackberry/qbbscreeneventhandler.cpp20
-rw-r--r--src/plugins/platforms/blackberry/qbbscreeneventthread.cpp (renamed from src/plugins/platforms/blackberry/qbbeventthread.cpp)50
-rw-r--r--src/plugins/platforms/blackberry/qbbscreeneventthread.h (renamed from src/plugins/platforms/blackberry/qbbeventthread.h)6
8 files changed, 100 insertions, 52 deletions
diff --git a/src/plugins/platforms/blackberry/blackberry.pro b/src/plugins/platforms/blackberry/blackberry.pro
index 2b0f0ab..4070237 100644
--- a/src/plugins/platforms/blackberry/blackberry.pro
+++ b/src/plugins/platforms/blackberry/blackberry.pro
@@ -6,7 +6,7 @@ QT += opengl
SOURCES = main.cpp \
qbbbuffer.cpp \
- qbbeventthread.cpp \
+ qbbscreeneventthread.cpp \
qbbglcontext.cpp \
qbbglwindowsurface.cpp \
qbbinputcontext.cpp \
@@ -25,7 +25,7 @@ SOURCES = main.cpp \
qbbnativeinterface.cpp
HEADERS = qbbbuffer.h \
- qbbeventthread.h \
+ qbbscreeneventthread.h \
qbbinputcontext.h \
qbbintegration.h \
qbbnavigatoreventhandler.h \
diff --git a/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp b/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp
index 97ed89c..5240a90 100644
--- a/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp
+++ b/src/plugins/platforms/blackberry/qbbbpseventfilter.cpp
@@ -40,18 +40,22 @@
//#define QBBBPSEVENTFILTER_DEBUG
#include "qbbbpseventfilter.h"
+#include "qbbscreen.h"
+#include "qbbscreeneventhandler.h"
#include <QAbstractEventDispatcher>
#include <QDebug>
#include <bps/event.h>
+#include <bps/screen.h>
QT_BEGIN_NAMESPACE
static QBBBpsEventFilter *sInstance;
-QBBBpsEventFilter::QBBBpsEventFilter(QObject *parent)
+QBBBpsEventFilter::QBBBpsEventFilter(QBBScreenEventHandler *screenEventHandler, QObject *parent)
: QObject(parent)
+ , mScreenEventHandler(screenEventHandler)
{
Q_ASSERT(sInstance == 0);
@@ -81,6 +85,18 @@ void QBBBpsEventFilter::installOnEventDispatcher(QAbstractEventDispatcher *dispa
Q_UNUSED(previousEventFilter);
}
+void QBBBpsEventFilter::registerForScreenEvents(QBBScreen *screen)
+{
+ 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 (screen_stop_events(screen->nativeContext()) != BPS_SUCCESS)
+ qWarning("QBB: failed to unregister for screen events on screen %p", screen->nativeContext());
+}
+
bool QBBBpsEventFilter::dispatcherEventFilter(void *message)
{
#if defined(QBBBPSEVENTFILTER_DEBUG)
@@ -95,12 +111,17 @@ bool QBBBpsEventFilter::dispatcherEventFilter(void *message)
bool QBBBpsEventFilter::bpsEventFilter(bps_event_t *event)
{
+ const int eventDomain = bps_event_get_domain(event);
+
#if defined(QBBBPSEVENTFILTER_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 mScreenEventHandler->handleEvent(screenEvent);
+ }
+
return false;
}
diff --git a/src/plugins/platforms/blackberry/qbbbpseventfilter.h b/src/plugins/platforms/blackberry/qbbbpseventfilter.h
index 3466577..e11478c 100644
--- a/src/plugins/platforms/blackberry/qbbbpseventfilter.h
+++ b/src/plugins/platforms/blackberry/qbbbpseventfilter.h
@@ -47,19 +47,27 @@ struct bps_event_t;
QT_BEGIN_NAMESPACE
class QAbstractEventDispatcher;
+class QBBScreen;
+class QBBScreenEventHandler;
class QBBBpsEventFilter : public QObject
{
Q_OBJECT
public:
- explicit QBBBpsEventFilter(QObject *parent = 0);
+ explicit QBBBpsEventFilter(QBBScreenEventHandler *screenEventHandler, QObject *parent = 0);
~QBBBpsEventFilter();
void installOnEventDispatcher(QAbstractEventDispatcher *dispatcher);
+ void registerForScreenEvents(QBBScreen *screen);
+ void unregisterForScreenEvents(QBBScreen *screen);
+
private:
static bool dispatcherEventFilter(void *message);
bool bpsEventFilter(bps_event_t *event);
+
+private:
+ QBBScreenEventHandler *mScreenEventHandler;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/blackberry/qbbintegration.cpp b/src/plugins/platforms/blackberry/qbbintegration.cpp
index ee06c31..aba8514 100644
--- a/src/plugins/platforms/blackberry/qbbintegration.cpp
+++ b/src/plugins/platforms/blackberry/qbbintegration.cpp
@@ -41,7 +41,7 @@
#include "qbbintegration.h"
#include "qbbinputcontext.h"
-#include "qbbeventthread.h"
+#include "qbbscreeneventthread.h"
#include "qbbglcontext.h"
#include "qbbglwindowsurface.h"
#include "qbbnavigatoreventhandler.h"
@@ -117,8 +117,11 @@ QBBIntegration::QBBIntegration() :
createDisplays();
// create/start event thread
- mEventThread = new QBBEventThread(mContext, mScreenEventHandler);
- mEventThread->start();
+ // Not on BlackBerry, it has specialised event dispatcher which also handles screen events
+#if !defined(Q_OS_BLACKBERRY)
+ mScreenEventThread = new QBBScreenEventThread(mContext, mScreenEventHandler);
+ mScreenEventThread->start();
+#endif
#ifdef QBBLOCALETHREAD_ENABLED
// Start the locale change monitoring thread.
@@ -128,7 +131,12 @@ QBBIntegration::QBBIntegration() :
#if defined(Q_OS_BLACKBERRY)
bps_initialize();
- mBpsEventFilter = new QBBBpsEventFilter;
+ mBpsEventFilter = new QBBBpsEventFilter(mScreenEventHandler);
+ Q_FOREACH (QPlatformScreen *platformScreen, mScreens) {
+ QBBScreen *screen = static_cast<QBBScreen*>(platformScreen);
+ mBpsEventFilter->registerForScreenEvents(screen);
+ }
+
mBpsEventFilter->installOnEventDispatcher(QAbstractEventDispatcher::instance());
#endif
@@ -165,12 +173,21 @@ QBBIntegration::~QBBIntegration()
#endif
// stop/destroy event thread
- delete mEventThread;
+ delete mScreenEventThread;
// stop/destroy navigator event handling classes
delete mNavigatorEventNotifier;
delete mNavigatorEventHandler;
+#if defined(Q_OS_BLACKBERRY)
+ Q_FOREACH (QPlatformScreen *platformScreen, mScreens) {
+ QBBScreen *screen = static_cast<QBBScreen*>(platformScreen);
+ mBpsEventFilter->unregisterForScreenEvents(screen);
+ }
+
+ delete mBpsEventFilter;
+#endif
+
delete mScreenEventHandler;
// destroy all displays
@@ -291,7 +308,7 @@ QBBScreen *QBBIntegration::primaryDisplay() const
void QBBIntegration::setCursorPos(int x, int y)
{
- mEventThread->injectPointerMoveEvent(x, y);
+ mScreenEventThread->injectPointerMoveEvent(x, y);
}
void QBBIntegration::createDisplays()
diff --git a/src/plugins/platforms/blackberry/qbbintegration.h b/src/plugins/platforms/blackberry/qbbintegration.h
index eaf3876..8fabe3f 100644
--- a/src/plugins/platforms/blackberry/qbbintegration.h
+++ b/src/plugins/platforms/blackberry/qbbintegration.h
@@ -46,7 +46,7 @@
QT_BEGIN_NAMESPACE
-class QBBEventThread;
+class QBBScreenEventThread;
class QBBNavigatorEventHandler;
class QBBNavigatorEventNotifier;
class QBBLocaleThread;
@@ -89,7 +89,7 @@ private:
void destroyDisplays();
screen_context_t mContext;
- QBBEventThread *mEventThread;
+ QBBScreenEventThread *mScreenEventThread;
QBBNavigatorEventHandler *mNavigatorEventHandler;
QBBNavigatorEventNotifier *mNavigatorEventNotifier;
QBBLocaleThread *mLocaleThread;
diff --git a/src/plugins/platforms/blackberry/qbbscreeneventhandler.cpp b/src/plugins/platforms/blackberry/qbbscreeneventhandler.cpp
index 1a87c7e..a12f71b 100644
--- a/src/plugins/platforms/blackberry/qbbscreeneventhandler.cpp
+++ b/src/plugins/platforms/blackberry/qbbscreeneventhandler.cpp
@@ -37,6 +37,8 @@
**
****************************************************************************/
+//#define QBBSCREENEVENTHANDLER_DEBUG
+
#include "qbbscreeneventhandler.h"
#include "qbbinputcontext.h"
@@ -111,7 +113,7 @@ bool QBBScreenEventHandler::handleEvent(screen_event_t event, int qnxType)
default:
// event ignored
-#if defined(QBBEVENTTHREAD_DEBUG)
+#if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: QNX unknown event";
#endif
return false;
@@ -323,14 +325,14 @@ void QBBScreenEventHandler::handlePointerEvent(screen_event_t event)
if (wOld) {
QWindowSystemInterface::handleLeaveEvent(wOld);
-#if defined(QBBScreenEventHandler_DEBUG)
+#if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt leave, w=" << wOld;
#endif
}
if (w) {
QWindowSystemInterface::handleEnterEvent(w);
-#if defined(QBBScreenEventHandler_DEBUG)
+#if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt enter, w=" << w;
#endif
}
@@ -368,7 +370,7 @@ void QBBScreenEventHandler::handlePointerEvent(screen_event_t event)
mLastLocalMousePoint != localPoint ||
mLastButtonState != buttons) {
QWindowSystemInterface::handleMouseEvent(w, localPoint, globalPoint, buttons);
-#if defined(QBBScreenEventHandler_DEBUG)
+#if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt mouse, w=" << w << ", (" << localPoint.x() << "," << localPoint.y() << "), b=" << (int)buttons;
#endif
}
@@ -377,7 +379,7 @@ void QBBScreenEventHandler::handlePointerEvent(screen_event_t event)
// Screen only supports a single wheel, so we will assume Vertical orientation for
// now since that is pretty much standard.
QWindowSystemInterface::handleWheelEvent(w, localPoint, globalPoint, wheelDelta, Qt::Vertical);
-#if defined(QBBScreenEventHandler_DEBUG)
+#if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt wheel, w=" << w << ", (" << localPoint.x() << "," << localPoint.y() << "), d=" << (int)wheelDelta;
#endif
}
@@ -434,14 +436,14 @@ void QBBScreenEventHandler::handleTouchEvent(screen_event_t event, int qnxType)
if (wOld) {
QWindowSystemInterface::handleLeaveEvent(wOld);
- #if defined(QBBScreenEventHandler_DEBUG)
+ #if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt leave, w=" << wOld;
#endif
}
if (w) {
QWindowSystemInterface::handleEnterEvent(w);
- #if defined(QBBScreenEventHandler_DEBUG)
+ #if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt enter, w=" << w;
#endif
}
@@ -461,7 +463,7 @@ void QBBScreenEventHandler::handleTouchEvent(screen_event_t event, int qnxType)
// inject event into Qt
QWindowSystemInterface::handleMouseEvent(w, localPoint, globalPoint, buttons);
-#if defined(QBBScreenEventHandler_DEBUG)
+#if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt mouse, w=" << w << ", (" << localPoint.x() << "," << localPoint.y() << "), b=" << buttons;
#endif
}
@@ -506,7 +508,7 @@ void QBBScreenEventHandler::handleTouchEvent(screen_event_t event, int qnxType)
// inject event into Qt
QWindowSystemInterface::handleTouchEvent(w, type, QTouchEvent::TouchScreen, pointList);
-#if defined(QBBScreenEventHandler_DEBUG)
+#if defined(QBBSCREENEVENTHANDLER_DEBUG)
qDebug() << "QBB: Qt touch, w=" << w << ", p=(" << pos[0] << "," << pos[1] << "), t=" << type;
#endif
}
diff --git a/src/plugins/platforms/blackberry/qbbeventthread.cpp b/src/plugins/platforms/blackberry/qbbscreeneventthread.cpp
index 2593223..f6dfcb2 100644
--- a/src/plugins/platforms/blackberry/qbbeventthread.cpp
+++ b/src/plugins/platforms/blackberry/qbbscreeneventthread.cpp
@@ -37,9 +37,9 @@
**
****************************************************************************/
-// #define QBBEVENTTHREAD_DEBUG
+// #define QBBSCREENEVENTTHREAD_DEBUG
-#include "qbbeventthread.h"
+#include "qbbscreeneventthread.h"
#include "qbbscreeneventhandler.h"
#include <QDebug>
@@ -48,30 +48,30 @@
QT_BEGIN_NAMESPACE
-QBBEventThread::QBBEventThread(screen_context_t context, QBBScreenEventHandler *eventHandler)
+QBBScreenEventThread::QBBScreenEventThread(screen_context_t context, QBBScreenEventHandler *eventHandler)
: mContext(context),
mQuit(false),
mEventHandler(eventHandler)
{
}
-QBBEventThread::~QBBEventThread()
+QBBScreenEventThread::~QBBScreenEventThread()
{
// block until thread terminates
shutdown();
}
-void QBBEventThread::injectKeyboardEvent(int flags, int sym, int mod, int scan, int cap)
+void QBBScreenEventThread::injectKeyboardEvent(int flags, int sym, int mod, int scan, int cap)
{
QBBScreenEventHandler::injectKeyboardEvent(flags, sym, mod, scan, cap);
}
-void QBBEventThread::injectPointerMoveEvent(int x, int y)
+void QBBScreenEventThread::injectPointerMoveEvent(int x, int y)
{
mEventHandler->injectPointerMoveEvent(x, y);
}
-void QBBEventThread::run()
+void QBBScreenEventThread::run()
{
screen_event_t event;
@@ -79,10 +79,10 @@ void QBBEventThread::run()
errno = 0;
int result = screen_create_event(&event);
if (result)
- qFatal("QBB: failed to create event, errno=%d", errno);
+ qFatal("QBB: failed to create screen event, errno=%d", errno);
-#if defined(QBBEVENTTHREAD_DEBUG)
- qDebug() << "QBB: event loop started";
+#if defined(QBBSCREENEVENTTHREAD_DEBUG)
+ qDebug() << "QBB: screen event thread started";
#endif
// loop indefinitely
@@ -92,19 +92,19 @@ void QBBEventThread::run()
errno = 0;
result = screen_get_event(mContext, event, -1);
if (result)
- qFatal("QBB: failed to get event, errno=%d", errno);
+ qFatal("QBB: failed to get screen event, errno=%d", errno);
// process received event
errno = 0;
int qnxType;
int result = screen_get_event_property_iv(event, SCREEN_PROPERTY_TYPE, &qnxType);
if (result)
- qFatal("QBB: failed to query event type, errno=%d", errno);
+ qFatal("QBB: failed to query screen event type, errno=%d", errno);
if (qnxType == SCREEN_EVENT_USER) {
- // treat all user events as shutdown requests
- #if defined(QBBEVENTTHREAD_DEBUG)
- qDebug() << "QBB: QNX user event";
+ // treat all screen user events as shutdown requests
+ #if defined(QBBSCREENEVENTTHREAD_DEBUG)
+ qDebug() << "QBB: QNX screen user event";
#endif
mQuit = true;
} else {
@@ -112,15 +112,15 @@ void QBBEventThread::run()
}
}
-#if defined(QBBEVENTTHREAD_DEBUG)
- qDebug() << "QBB: event loop stopped";
+#if defined(QBBSCREENEVENTTHREAD_DEBUG)
+ qDebug() << "QBB: screen event thread stopped";
#endif
// cleanup
screen_destroy_event(event);
}
-void QBBEventThread::shutdown()
+void QBBScreenEventThread::shutdown()
{
screen_event_t event;
@@ -128,14 +128,14 @@ void QBBEventThread::shutdown()
errno = 0;
int result = screen_create_event(&event);
if (result)
- qFatal("QBB: failed to create event, errno=%d", errno);
+ qFatal("QBB: 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("QBB: failed to set event type, errno=%d", errno);
+ qFatal("QBB: failed to set screen event type, errno=%d", errno);
// NOTE: ignore SCREEN_PROPERTY_USER_DATA; treat all user events as shutdown events
@@ -143,20 +143,20 @@ void QBBEventThread::shutdown()
errno = 0;
result = screen_send_event(mContext, event, getpid());
if (result)
- qFatal("QBB: failed to set event type, errno=%d", errno);
+ qFatal("QBB: failed to set screen event type, errno=%d", errno);
// cleanup
screen_destroy_event(event);
-#if defined(QBBEVENTTHREAD_DEBUG)
- qDebug() << "QBB: event loop shutdown begin";
+#if defined(QBBSCREENEVENTTHREAD_DEBUG)
+ qDebug() << "QBB: screen event thread shutdown begin";
#endif
// block until thread terminates
wait();
-#if defined(QBBEVENTTHREAD_DEBUG)
- qDebug() << "QBB: event loop shutdown end";
+#if defined(QBBSCREENEVENTTHREAD_DEBUG)
+ qDebug() << "QBB: screen event thread shutdown end";
#endif
}
diff --git a/src/plugins/platforms/blackberry/qbbeventthread.h b/src/plugins/platforms/blackberry/qbbscreeneventthread.h
index df8c0ea..0cc2355 100644
--- a/src/plugins/platforms/blackberry/qbbeventthread.h
+++ b/src/plugins/platforms/blackberry/qbbscreeneventthread.h
@@ -48,11 +48,11 @@ QT_BEGIN_NAMESPACE
class QBBScreenEventHandler;
-class QBBEventThread : public QThread
+class QBBScreenEventThread : public QThread
{
public:
- QBBEventThread(screen_context_t context, QBBScreenEventHandler *eventHandler);
- virtual ~QBBEventThread();
+ QBBScreenEventThread(screen_context_t context, QBBScreenEventHandler *eventHandler);
+ virtual ~QBBScreenEventThread();
static void injectKeyboardEvent(int flags, int sym, int mod, int scan, int cap);
void injectPointerMoveEvent(int x, int y);