diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/qnx/qqnxintegration.cpp | 24 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp | 8 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h | 9 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxscreen.cpp | 6 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxscreen.h | 2 |
5 files changed, 29 insertions, 20 deletions
diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp index faec340347..687002db09 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.cpp +++ b/src/plugins/platforms/qnx/qqnxintegration.cpp @@ -103,16 +103,6 @@ QQnxIntegration::QQnxIntegration() qFatal("QQnx: failed to connect to composition manager, errno=%d", errno); } - // Create displays for all possible screens (which may not be attached) - createDisplays(); - - // Initialize global OpenGL resources - QQnxGLContext::initialize(); - - // Create/start event thread - m_eventThread = new QQnxEventThread(m_screenContext, m_screenEventHandler); - m_eventThread->start(); - // Create/start navigator event handler // Not on BlackBerry, it has specialised event dispatcher which also handles navigator events #ifndef Q_OS_BLACKBERRY @@ -123,6 +113,16 @@ QQnxIntegration::QQnxIntegration() QMetaObject::invokeMethod(m_navigatorEventHandler, "start", Qt::QueuedConnection); #endif + // Create displays for all possible screens (which may not be attached) + createDisplays(); + + // Initialize global OpenGL resources + QQnxGLContext::initialize(); + + // Create/start event thread + m_eventThread = new QQnxEventThread(m_screenContext, m_screenEventHandler); + m_eventThread->start(); + // Create/start the keyboard class. m_virtualKeyboard = new QQnxVirtualKeyboard(); @@ -360,6 +360,10 @@ void QQnxIntegration::createDisplays() screen, SLOT(newWindowCreated(void *))); QObject::connect(m_screenEventHandler, SIGNAL(windowClosed(void *)), screen, SLOT(windowClosed(void *))); + +#ifndef Q_OS_BLACKBERRY + QObject::connect(m_navigatorEventHandler, SIGNAL(rotationChanged(int)), screen, SLOT(setRotation(int))); +#endif } } diff --git a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp index 4db86cb5cf..9527a57ca3 100644 --- a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp +++ b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.cpp @@ -40,7 +40,6 @@ ****************************************************************************/ #include "qqnxnavigatoreventhandler.h" -#include "qqnxscreen.h" #include <QtGui/QGuiApplication> #include <QtGui/QWindow> @@ -61,8 +60,8 @@ static const char *navigatorControlPath = "/pps/services/navigator/control"; static const int ppsBufferSize = 4096; -QQnxNavigatorEventHandler::QQnxNavigatorEventHandler(QQnxScreen& primaryScreen) - : m_primaryScreen(primaryScreen), +QQnxNavigatorEventHandler::QQnxNavigatorEventHandler(QObject *parent) + : QObject(parent), m_fd(-1), m_readNotifier(0) { @@ -202,8 +201,7 @@ void QQnxNavigatorEventHandler::handleMessage(const QByteArray &msg, const QByte #if defined(QQNXNAVIGATOREVENTHANDLER_DEBUG) qDebug() << "PPS: orientation, o=" << dat; #endif - m_primaryScreen.setRotation( dat.toInt() ); - QWindowSystemInterface::handleScreenGeometryChange(0, m_primaryScreen.geometry()); + Q_EMIT rotationChanged(dat.toInt()); replyPPS(msg, id, ""); } else if (msg == "SWIPE_DOWN") { diff --git a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h index 2e0bd1fa14..8084eba1d9 100644 --- a/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h +++ b/src/plugins/platforms/qnx/qqnxnavigatoreventhandler.h @@ -46,15 +46,17 @@ QT_BEGIN_NAMESPACE -class QQnxScreen; class QSocketNotifier; class QQnxNavigatorEventHandler : public QObject { Q_OBJECT public: - QQnxNavigatorEventHandler(QQnxScreen &primaryScreen); - virtual ~QQnxNavigatorEventHandler(); + explicit QQnxNavigatorEventHandler(QObject *parent = 0); + ~QQnxNavigatorEventHandler(); + +Q_SIGNALS: + void rotationChanged(int angle); public Q_SLOTS: void start(); @@ -67,7 +69,6 @@ private: void replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat); void handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id); - QQnxScreen &m_primaryScreen; int m_fd; QSocketNotifier *m_readNotifier; }; diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp index 7ddef321ae..27c1357a87 100644 --- a/src/plugins/platforms/qnx/qqnxscreen.cpp +++ b/src/plugins/platforms/qnx/qqnxscreen.cpp @@ -190,6 +190,12 @@ void QQnxScreen::setRotation(int rotation) // Save new rotation m_currentRotation = rotation; + + // TODO: check if other screens are supposed to rotate as well and/or whether this depends + // on if clone mode is being used. + // Rotating only the primary screen is what we had in the navigator event handler before refactoring + if (m_primaryScreen) + QWindowSystemInterface::handleScreenGeometryChange(screen(), m_currentGeometry); } } diff --git a/src/plugins/platforms/qnx/qqnxscreen.h b/src/plugins/platforms/qnx/qqnxscreen.h index b90f6f5abf..272cdd6261 100644 --- a/src/plugins/platforms/qnx/qqnxscreen.h +++ b/src/plugins/platforms/qnx/qqnxscreen.h @@ -71,7 +71,6 @@ public: bool isPrimaryScreen() const { return m_primaryScreen; } int rotation() const { return m_currentRotation; } - void setRotation(int rotation); int nativeFormat() const { return (depth() == 32) ? SCREEN_FORMAT_RGBA8888 : SCREEN_FORMAT_RGB565; } screen_display_t nativeDisplay() const { return m_display; } @@ -92,6 +91,7 @@ public: QSharedPointer<QQnxRootWindow> rootWindow() const { return m_rootWindow; } public Q_SLOTS: + void setRotation(int rotation); void newWindowCreated(void *window); void windowClosed(void *window); |