Made QWindow::currentOrientation() a property.
authorSamuel Rødal <samuel.rodal@nokia.com>
Wed, 25 Jan 2012 12:41:43 +0000 (13:41 +0100)
committerQt by Nokia <qt-info@nokia.com>
Thu, 26 Jan 2012 07:32:28 +0000 (08:32 +0100)
To match the previous QWindow::orientation() property which can be
useful to access from QML. Also, removed the automatic translation of
Qt::PrimaryOrientation to QScreen::primaryOrientation() on the QWindow
level, as it leads to a lot of complexity regarding the
QWindow::contentOrientationChanged() signal, and makes it hard to
distinguish between the case where the window's orientation follows
that of the screen, and the case where the orientation just happens to
be set to that of the screen.

Change-Id: I6950d1337b7f929815eff1328181855090d8066b
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
src/corelib/global/qnamespace.qdoc
src/gui/kernel/qscreen.cpp
src/gui/kernel/qwindow.cpp
src/gui/kernel/qwindow.h
tests/auto/gui/kernel/qwindow/tst_qwindow.cpp

index 37be933..53ad12e 100644 (file)
 
     This enum type specifies the various orientations a screen might have.
 
-    \value PrimaryOrientation           The display's primary orientation. The QWindow and QScreen APIs never return this value,
-                                        instead it will be mapped to the corresponding QScreen's QScreen::primaryOrientation().
+    \value PrimaryOrientation           The display's primary orientation.
     \value LandscapeOrientation         Landscape orientation, display width is greater than display height.
     \value PortraitOrientation          Portrait orientation, display height is greater than display width,
                                         rotated 90 degree clockwise relative to landscape.
index 43c2dcc..d8413d5 100644 (file)
@@ -351,6 +351,8 @@ QRect QScreen::availableVirtualGeometry() const
     will change based on the device is being held, and a desktop display
     might be rotated so that it's in portrait mode.
 
+    Qt::PrimaryOrientation is never returned.
+
     \sa primaryOrientation(), orientationChanged()
 */
 Qt::ScreenOrientation QScreen::orientation() const
index 65ac5f1..5bab203 100644 (file)
@@ -411,24 +411,26 @@ bool QWindow::isActive() const
 void QWindow::reportContentOrientationChange(Qt::ScreenOrientation orientation)
 {
     Q_D(QWindow);
+    if (d->contentOrientation == orientation)
+        return;
     if (!d->platformWindow)
         create();
     Q_ASSERT(d->platformWindow);
     d->contentOrientation = orientation;
     d->platformWindow->handleContentOrientationChange(orientation);
+    emit contentOrientationChanged(orientation);
 }
 
 /*!
   Returns the actual content orientation.
 
-  This is the last value set with reportContentOrientationChange(),
-  except Qt::PrimaryOrientation gets converted to the screen's
-  primary orientation.
+  This is the last value set with reportContentOrientationChange(). It defaults
+  to Qt::PrimaryOrientation.
 */
 Qt::ScreenOrientation QWindow::contentOrientation() const
 {
     Q_D(const QWindow);
-    return d->contentOrientation == Qt::PrimaryOrientation ? screen()->primaryOrientation() : d->contentOrientation;
+    return d->contentOrientation;
 }
 
 /*!
@@ -461,12 +463,14 @@ bool QWindow::requestWindowOrientation(Qt::ScreenOrientation orientation)
 /*!
   Returns the actual window orientation.
 
+  The default value is Qt::PrimaryOrientation.
+
   \sa requestWindowOrientation()
 */
 Qt::ScreenOrientation QWindow::windowOrientation() const
 {
     Q_D(const QWindow);
-    return d->windowOrientation == Qt::PrimaryOrientation ? screen()->primaryOrientation() : d->windowOrientation;
+    return d->windowOrientation;
 }
 
 Qt::WindowState QWindow::windowState() const
index 1de5105..be0ca99 100644 (file)
@@ -90,6 +90,7 @@ class Q_GUI_EXPORT QWindow : public QObject, public QSurface
     Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
     Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged)
     Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged)
+    Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation WRITE reportContentOrientationChange NOTIFY contentOrientationChanged)
 
 public:
     enum SurfaceType { RasterSurface, OpenGLSurface };
@@ -259,6 +260,7 @@ Q_SIGNALS:
     void heightChanged(int arg);
 
     void visibleChanged(bool arg);
+    void contentOrientationChanged(Qt::ScreenOrientation orientation);
 
 private Q_SLOTS:
     void screenDestroyed(QObject *screen);
index d0d2ce1..91f9e4e 100644 (file)
@@ -492,11 +492,15 @@ void tst_QWindow::orientation()
     QCOMPARE(window.contentOrientation(), Qt::PortraitOrientation);
 
     window.reportContentOrientationChange(Qt::PrimaryOrientation);
-    QCOMPARE(window.contentOrientation(), window.screen()->primaryOrientation());
+    QCOMPARE(window.contentOrientation(), Qt::PrimaryOrientation);
 
     QVERIFY(!window.requestWindowOrientation(Qt::LandscapeOrientation) || window.windowOrientation() == Qt::LandscapeOrientation);
     QVERIFY(!window.requestWindowOrientation(Qt::PortraitOrientation) || window.windowOrientation() == Qt::PortraitOrientation);
-    QVERIFY(!window.requestWindowOrientation(Qt::PrimaryOrientation) || window.windowOrientation() == window.screen()->primaryOrientation());
+    QVERIFY(!window.requestWindowOrientation(Qt::PrimaryOrientation) || window.windowOrientation() == Qt::PrimaryOrientation);
+
+    QSignalSpy spy(&window, SIGNAL(contentOrientationChanged(Qt::ScreenOrientation)));
+    window.reportContentOrientationChange(Qt::LandscapeOrientation);
+    QCOMPARE(spy.count(), 1);
 }
 
 #include <tst_qwindow.moc>