summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/qnx/qnx.pro3
-rw-r--r--src/plugins/platforms/qnx/qqnxintegration.cpp18
-rw-r--r--src/plugins/platforms/qnx/qqnxintegration.h2
-rw-r--r--src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp210
-rw-r--r--src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h24
-rw-r--r--src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp233
-rw-r--r--src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.h77
7 files changed, 357 insertions, 210 deletions
diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro
index bdc8c38614..82c3b201c9 100644
--- a/src/plugins/platforms/qnx/qnx.pro
+++ b/src/plugins/platforms/qnx/qnx.pro
@@ -17,6 +17,7 @@ QT += opengl opengl-private platformsupport platformsupport-private widgets-priv
#DEFINES += QQNXINPUTCONTEXT_IMF_EVENT_DEBUG
#DEFINES += QQNXINTEGRATION_DEBUG
#DEFINES += QQNXNAVIGATOREVENTHANDLER_DEBUG
+#DEFINES += QQNXNAVIGATOREVENTNOTIFIER_DEBUG
#DEFINES += QQNXRASTERBACKINGSTORE_DEBUG
#DEFINES += QQNXROOTWINDOW_DEBUG
#DEFINES += QQNXSCREEN_DEBUG
@@ -31,6 +32,7 @@ SOURCES = main.cpp \
qqnxglbackingstore.cpp \
qqnxintegration.cpp \
qqnxnavigatoreventhandler.cpp \
+ qqnxnavigatoreventnotifier.cpp \
qqnxscreen.cpp \
qqnxwindow.cpp \
qqnxrasterbackingstore.cpp \
@@ -46,6 +48,7 @@ HEADERS = qqnxbuffer.h \
qqnxkeytranslator.h \
qqnxintegration.h \
qqnxnavigatoreventhandler.h \
+ qqnxnavigatoreventnotifier.h \
qqnxglcontext.h \
qqnxglbackingstore.h \
qqnxscreen.h \
diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp
index f12073e367..b4112999b6 100644
--- a/src/plugins/platforms/qnx/qqnxintegration.cpp
+++ b/src/plugins/platforms/qnx/qqnxintegration.cpp
@@ -45,6 +45,7 @@
#include "qqnxglcontext.h"
#include "qqnxnativeinterface.h"
#include "qqnxnavigatoreventhandler.h"
+#include "qqnxnavigatoreventnotifier.h"
#include "qqnxrasterbackingstore.h"
#include "qqnxscreen.h"
#include "qqnxscreeneventhandler.h"
@@ -80,7 +81,8 @@ QMutex QQnxIntegration::ms_windowMapperMutex;
QQnxIntegration::QQnxIntegration()
: QPlatformIntegration()
, m_eventThread(0)
- , m_navigatorEventHandler(0)
+ , m_navigatorEventHandler(new QQnxNavigatorEventHandler())
+ , m_navigatorEventNotifier(0)
, m_virtualKeyboard(0)
, m_inputContext(0)
, m_fontDatabase(new QGenericUnixFontDatabase())
@@ -103,12 +105,12 @@ QQnxIntegration::QQnxIntegration()
qFatal("QQnx: failed to connect to composition manager, errno=%d", errno);
}
- // Create/start navigator event handler
- m_navigatorEventHandler = new QQnxNavigatorEventHandler;
+ // Create/start navigator event notifier
+ m_navigatorEventNotifier = new QQnxNavigatorEventNotifier(m_navigatorEventHandler);
// delay invocation of start() to the time the event loop is up and running
// needed to have the QThread internals of the main thread properly initialized
- QMetaObject::invokeMethod(m_navigatorEventHandler, "start", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(m_navigatorEventNotifier, "start", Qt::QueuedConnection);
// Create displays for all possible screens (which may not be attached)
createDisplays();
@@ -160,12 +162,12 @@ QQnxIntegration::~QQnxIntegration()
delete m_clipboard;
#endif
- // Stop/destroy event thread
- delete m_eventThread;
-
- // Stop/destroy navigator thread
+ // Stop/destroy navigator event notifier
+ delete m_navigatorEventNotifier;
delete m_navigatorEventHandler;
+ // Stop/destroy event thread
+ delete m_eventThread;
delete m_screenEventHandler;
// Destroy all displays
diff --git a/src/plugins/platforms/qnx/qqnxintegration.h b/src/plugins/platforms/qnx/qqnxintegration.h
index f29baf1323..801bd7b6e5 100644
--- a/src/plugins/platforms/qnx/qqnxintegration.h
+++ b/src/plugins/platforms/qnx/qqnxintegration.h
@@ -54,6 +54,7 @@ class QQnxEventThread;
class QQnxInputContext;
class QQnxNativeInterface;
class QQnxNavigatorEventHandler;
+class QQnxNavigatorEventNotifier;
class QQnxAbstractVirtualKeyboard;
class QQnxWindow;
class QQnxServices;
@@ -112,6 +113,7 @@ private:
screen_context_t m_screenContext;
QQnxEventThread *m_eventThread;
QQnxNavigatorEventHandler *m_navigatorEventHandler;
+ QQnxNavigatorEventNotifier *m_navigatorEventNotifier;
QQnxAbstractVirtualKeyboard *m_virtualKeyboard;
QQnxInputContext *m_inputContext;
QPlatformFontDatabase *m_fontDatabase;
diff --git a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp
index 9527a57ca3..72227c6089 100644
--- a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp
+++ b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp
@@ -1,6 +1,6 @@
/***************************************************************************
**
-** Copyright (C) 2011 - 2012 Research In Motion
+** Copyright (C) 2012 Research In Motion
** Contact: http://www.qt-project.org/
**
** This file is part of the plugins of the Qt Toolkit.
@@ -41,216 +41,58 @@
#include "qqnxnavigatoreventhandler.h"
-#include <QtGui/QGuiApplication>
-#include <QtGui/QWindow>
-#include <QtGui/QWindowSystemInterface>
+#include <QDebug>
+#include <QGuiApplication>
+#include <QWindowSystemInterface>
-#include <QtCore/QByteArray>
-#include <QtCore/QDebug>
-#include <QtCore/QList>
-#include <QtCore/QSocketNotifier>
-#include <QtCore/private/qcore_unix_p.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-static const char *navigatorControlPath = "/pps/services/navigator/control";
-static const int ppsBufferSize = 4096;
+QT_BEGIN_NAMESPACE
QQnxNavigatorEventHandler::QQnxNavigatorEventHandler(QObject *parent)
- : QObject(parent),
- m_fd(-1),
- m_readNotifier(0)
-{
-}
-
-QQnxNavigatorEventHandler::~QQnxNavigatorEventHandler()
+ : QObject(parent)
{
- delete m_readNotifier;
-
- // close connection to navigator
- if (m_fd != -1)
- close(m_fd);
-
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "QQNX: navigator event handler stopped";
-#endif
}
-void QQnxNavigatorEventHandler::start()
+bool QQnxNavigatorEventHandler::handleOrientationCheck(int angle)
{
+ // reply to navigator that (any) orientation is acceptable
#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "QQNX: navigator event handler started";
+ qDebug() << Q_FUNC_INFO << "angle=" << angle;
#endif
- // open connection to navigator
- errno = 0;
- m_fd = open(navigatorControlPath, O_RDWR);
- if (m_fd == -1) {
- qWarning("QQNX: failed to open navigator pps, errno=%d", errno);
- return;
- }
-
- m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
- connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(readData()));
+ // TODO: check if top window flags prohibit orientation change
+ return true;
}
-void QQnxNavigatorEventHandler::parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id)
+void QQnxNavigatorEventHandler::handleOrientationChange(int angle)
{
+ // update screen geometry and reply to navigator that we're ready
#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: data=" << ppsData;
-#endif
-
- // tokenize pps data into lines
- QList<QByteArray> lines = ppsData.split('\n');
-
- // validate pps object
- if (lines.size() == 0 || lines.at(0) != "@control") {
- qFatal("QQNX: unrecognized pps object, data=%s", ppsData.constData());
- }
-
- // parse pps object attributes and extract values
- for (int i = 1; i < lines.size(); i++) {
-
- // tokenize current attribute
- const QByteArray &attr = lines.at(i);
-
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: attr=" << attr;
-#endif
-
- int firstColon = attr.indexOf(':');
- if (firstColon == -1) {
- // abort - malformed attribute
- continue;
- }
-
- int secondColon = attr.indexOf(':', firstColon + 1);
- if (secondColon == -1) {
- // abort - malformed attribute
- continue;
- }
-
- QByteArray key = attr.left(firstColon);
- QByteArray value = attr.mid(secondColon + 1);
-
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: key=" << key;
- qDebug() << "PPS: val=" << value;
+ qDebug() << Q_FUNC_INFO << "angle=" << angle;
#endif
- // save attribute value
- if (key == "msg") {
- msg = value;
- } else if (key == "dat") {
- dat = value;
- } else if (key == "id") {
- id = value;
- } else {
- qFatal("QQNX: unrecognized pps attribute, attr=%s", key.constData());
- }
- }
+ emit rotationChanged(angle);
}
-void QQnxNavigatorEventHandler::replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat)
+void QQnxNavigatorEventHandler::handleSwipeDown()
{
- // construct pps message
- QByteArray ppsData = "res::";
- ppsData += res;
- ppsData += "\nid::";
- ppsData += id;
- if (!dat.isEmpty()) {
- ppsData += "\ndat::";
- ppsData += dat;
- }
- ppsData += "\n";
-
+ // simulate menu key press
#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS reply=" << ppsData;
+ qDebug() << Q_FUNC_INFO;
#endif
- // send pps message to navigator
- errno = 0;
- int bytes = write(m_fd, ppsData.constData(), ppsData.size());
- if (bytes == -1) {
- qFatal("QQNX: failed to write navigator pps, errno=%d", errno);
- }
+ QWindow *w = QGuiApplication::focusWindow();
+ QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyPress, Qt::Key_Menu, Qt::NoModifier);
+ QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyRelease, Qt::Key_Menu, Qt::NoModifier);
}
-void QQnxNavigatorEventHandler::handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id)
+void QQnxNavigatorEventHandler::handleExit()
{
+ // shutdown everything
#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: msg=" << msg << ", dat=" << dat << ", id=" << id;
+ qDebug() << Q_FUNC_INFO;
#endif
- // check message type
- if (msg == "orientationCheck") {
-
- // reply to navigator that (any) orientation is acceptable
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: orientation check, o=" << dat;
-#endif
- replyPPS(msg, id, "true");
-
- } else if (msg == "orientation") {
-
- // update screen geometry and reply to navigator that we're ready
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: orientation, o=" << dat;
-#endif
- Q_EMIT rotationChanged(dat.toInt());
- replyPPS(msg, id, "");
-
- } else if (msg == "SWIPE_DOWN") {
-
- // simulate menu key press
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: menu";
-#endif
- QWindow *w = QGuiApplication::focusWindow();
- QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyPress, Qt::Key_Menu, Qt::NoModifier);
- QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyRelease, Qt::Key_Menu, Qt::NoModifier);
-
- } else if (msg == "exit") {
-
- // shutdown everything
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "PPS: exit";
-#endif
- QCoreApplication::quit();
- }
+ QCoreApplication::quit();
}
-void QQnxNavigatorEventHandler::readData()
-{
-#if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG)
- qDebug() << "QQNX: reading navigator data";
-#endif
- // allocate buffer for pps data
- char buffer[ppsBufferSize];
-
- // attempt to read pps data
- errno = 0;
- int bytes = qt_safe_read(m_fd, buffer, ppsBufferSize - 1);
- if (bytes == -1) {
- qFatal("QQNX: failed to read navigator pps, errno=%d", errno);
- }
-
- // check if pps data was received
- if (bytes > 0) {
-
- // ensure data is null terminated
- buffer[bytes] = '\0';
-
- // process received message
- QByteArray ppsData(buffer);
- QByteArray msg;
- QByteArray dat;
- QByteArray id;
- parsePPS(ppsData, msg, dat, id);
- handleMessage(msg, dat, id);
- }
-}
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h
index 8084eba1d9..58a1ac8cb3 100644
--- a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h
+++ b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h
@@ -1,6 +1,6 @@
/***************************************************************************
**
-** Copyright (C) 2011 - 2012 Research In Motion
+** Copyright (C) 2012 Research In Motion
** Contact: http://www.qt-project.org/
**
** This file is part of the plugins of the Qt Toolkit.
@@ -46,31 +46,19 @@
QT_BEGIN_NAMESPACE
-class QSocketNotifier;
-
class QQnxNavigatorEventHandler : public QObject
{
Q_OBJECT
public:
explicit QQnxNavigatorEventHandler(QObject *parent = 0);
- ~QQnxNavigatorEventHandler();
+
+ bool handleOrientationCheck(int angle);
+ void handleOrientationChange(int angle);
+ void handleSwipeDown();
+ void handleExit();
Q_SIGNALS:
void rotationChanged(int angle);
-
-public Q_SLOTS:
- void start();
-
-private Q_SLOTS:
- void readData();
-
-private:
- void parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id);
- void replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat);
- void handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id);
-
- int m_fd;
- QSocketNotifier *m_readNotifier;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp b/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp
new file mode 100644
index 0000000000..d5220c936e
--- /dev/null
+++ b/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp
@@ -0,0 +1,233 @@
+/***************************************************************************
+**
+** Copyright (C) 2011 - 2012 Research In Motion
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qqnxnavigatoreventnotifier.h"
+
+#include "qqnxnavigatoreventhandler.h"
+
+#include <QtCore/QByteArray>
+#include <QtCore/QDebug>
+#include <QtCore/QList>
+#include <QtCore/QSocketNotifier>
+#include <QtCore/private/qcore_unix_p.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+static const char *navigatorControlPath = "/pps/services/navigator/control";
+static const int ppsBufferSize = 4096;
+
+QT_BEGIN_NAMESPACE
+
+QQnxNavigatorEventNotifier::QQnxNavigatorEventNotifier(QQnxNavigatorEventHandler *eventHandler, QObject *parent)
+ : QObject(parent),
+ m_fd(-1),
+ m_readNotifier(0),
+ m_eventHandler(eventHandler)
+{
+}
+
+QQnxNavigatorEventNotifier::~QQnxNavigatorEventNotifier()
+{
+ delete m_readNotifier;
+
+ // close connection to navigator
+ if (m_fd != -1)
+ close(m_fd);
+
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "QQNX: navigator event notifier stopped";
+#endif
+}
+
+void QQnxNavigatorEventNotifier::start()
+{
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "QQNX: navigator event notifier started";
+#endif
+
+ // open connection to navigator
+ errno = 0;
+ m_fd = open(navigatorControlPath, O_RDWR);
+ if (m_fd == -1) {
+ qWarning("QQNX: failed to open navigator pps, errno=%d", errno);
+ return;
+ }
+
+ m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
+ connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(readData()));
+}
+
+void QQnxNavigatorEventNotifier::parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id)
+{
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "PPS: data=" << ppsData;
+#endif
+
+ // tokenize pps data into lines
+ QList<QByteArray> lines = ppsData.split('\n');
+
+ // validate pps object
+ if (lines.size() == 0 || lines.at(0) != "@control")
+ qFatal("QQNX: unrecognized pps object, data=%s", ppsData.constData());
+
+ // parse pps object attributes and extract values
+ for (int i = 1; i < lines.size(); ++i) {
+
+ // tokenize current attribute
+ const QByteArray &attr = lines.at(i);
+
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "PPS: attr=" << attr;
+#endif
+
+ int firstColon = attr.indexOf(':');
+ if (firstColon == -1) {
+ // abort - malformed attribute
+ continue;
+ }
+
+ int secondColon = attr.indexOf(':', firstColon + 1);
+ if (secondColon == -1) {
+ // abort - malformed attribute
+ continue;
+ }
+
+ QByteArray key = attr.left(firstColon);
+ QByteArray value = attr.mid(secondColon + 1);
+
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "PPS: key=" << key;
+ qDebug() << "PPS: val=" << value;
+#endif
+
+ // save attribute value
+ if (key == "msg")
+ msg = value;
+ else if (key == "dat")
+ dat = value;
+ else if (key == "id")
+ id = value;
+ else
+ qFatal("QQNX: unrecognized pps attribute, attr=%s", key.constData());
+ }
+}
+
+void QQnxNavigatorEventNotifier::replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat)
+{
+ // construct pps message
+ QByteArray ppsData = "res::";
+ ppsData += res;
+ ppsData += "\nid::";
+ ppsData += id;
+ if (!dat.isEmpty()) {
+ ppsData += "\ndat::";
+ ppsData += dat;
+ }
+ ppsData += "\n";
+
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "PPS reply=" << ppsData;
+#endif
+
+ // send pps message to navigator
+ errno = 0;
+ int bytes = write(m_fd, ppsData.constData(), ppsData.size());
+ if (bytes == -1)
+ qFatal("QQNX: failed to write navigator pps, errno=%d", errno);
+}
+
+void QQnxNavigatorEventNotifier::handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id)
+{
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "PPS: msg=" << msg << ", dat=" << dat << ", id=" << id;
+#endif
+
+ // check message type
+ if (msg == "orientationCheck") {
+ const bool response = m_eventHandler->handleOrientationCheck(dat.toInt());
+
+ // reply to navigator that (any) orientation is acceptable
+ replyPPS(msg, id, response ? "true" : "false");
+ } else if (msg == "orientation") {
+ m_eventHandler->handleOrientationChange(dat.toInt());
+ replyPPS(msg, id, "");
+ } else if (msg == "SWIPE_DOWN") {
+ m_eventHandler->handleSwipeDown();
+ } else if (msg == "exit") {
+ m_eventHandler->handleExit();
+ }
+}
+
+void QQnxNavigatorEventNotifier::readData()
+{
+#if defined(QQNXNAVIGATOREVENTNOTIFIER_DEBUG)
+ qDebug() << "QQNX: reading navigator data";
+#endif
+ // allocate buffer for pps data
+ char buffer[ppsBufferSize];
+
+ // attempt to read pps data
+ errno = 0;
+ int bytes = qt_safe_read(m_fd, buffer, ppsBufferSize - 1);
+ if (bytes == -1)
+ qFatal("QQNX: failed to read navigator pps, errno=%d", errno);
+
+ // check if pps data was received
+ if (bytes > 0) {
+
+ // ensure data is null terminated
+ buffer[bytes] = '\0';
+
+ // process received message
+ QByteArray ppsData(buffer);
+ QByteArray msg;
+ QByteArray dat;
+ QByteArray id;
+ parsePPS(ppsData, msg, dat, id);
+ handleMessage(msg, dat, id);
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.h b/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.h
new file mode 100644
index 0000000000..bdf1220b56
--- /dev/null
+++ b/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.h
@@ -0,0 +1,77 @@
+/***************************************************************************
+**
+** Copyright (C) 2011 - 2012 Research In Motion
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQNXNAVIGATOREVENTNOTIFIER_H
+#define QQNXNAVIGATOREVENTNOTIFIER_H
+
+#include <QObject>
+
+QT_BEGIN_NAMESPACE
+
+class QQnxNavigatorEventHandler;
+class QSocketNotifier;
+
+class QQnxNavigatorEventNotifier : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QQnxNavigatorEventNotifier(QQnxNavigatorEventHandler *eventHandler, QObject *parent = 0);
+ ~QQnxNavigatorEventNotifier();
+
+public Q_SLOTS:
+ void start();
+
+private Q_SLOTS:
+ void readData();
+
+private:
+ void parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id);
+ void replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat);
+ void handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id);
+
+ int m_fd;
+ QSocketNotifier *m_readNotifier;
+ QQnxNavigatorEventHandler *m_eventHandler;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQNXNAVIGATOREVENTNOTIFIER_H