diff options
author | Daniel d'Andrada <daniel.dandrada@nokia.com> | 2010-11-15 15:36:28 +0200 |
---|---|---|
committer | Dominik Kapusta <dominik.kapusta@teleca.com> | 2010-11-16 11:24:13 +0100 |
commit | becb4654219d48b758213799b4c97a306eaced80 (patch) | |
tree | 82a66e2919753a40978a376fd4ad994f8c37fc89 | |
parent | cecf0252f72b88a8641eae19d4473367499fa690 (diff) |
Fixes: NB#203504 - Not possible to disable orientation change animation in MWindow
RevBy: Stanislav, Dominik
Details:
Added a new dynamic property to MWindow that enables an application
to choose whether it wants the orientation change transitions generated by
a MWindow to be animated or not.
It's made as a dynamic property (instead of a hard-coded one) since it's
only needed for a specific application to achieve a so far unique use case.
-rw-r--r-- | src/corelib/widgets/mwindow.cpp | 36 | ||||
-rw-r--r-- | src/corelib/widgets/mwindow.h | 6 | ||||
-rw-r--r-- | src/corelib/widgets/mwindow_p.h | 3 | ||||
-rw-r--r-- | src/corelib/widgets/widgets.pri | 1 | ||||
-rw-r--r-- | tests/ut_mwindow/ut_mwindow.cpp | 45 | ||||
-rw-r--r-- | tests/ut_mwindow/ut_mwindow.h | 4 |
6 files changed, 88 insertions, 7 deletions
diff --git a/src/corelib/widgets/mwindow.cpp b/src/corelib/widgets/mwindow.cpp index e59d09dc..c86f4c08 100644 --- a/src/corelib/widgets/mwindow.cpp +++ b/src/corelib/widgets/mwindow.cpp @@ -65,6 +65,8 @@ namespace { const char* FollowsCurrentApplicationWindowOrientationPropertyName = "followsCurrentApplicationWindowOrientation"; #endif + const char* AnimatedOrientationChangePropertyName = + "animatedOrientationChange"; } /// Actual class @@ -504,6 +506,27 @@ void MWindowPrivate::_q_enablePaintUpdates() q->setUpdatesEnabled(true); } +MSceneManager::TransitionMode MWindowPrivate::orientationChangeTransitionMode() +{ + Q_Q(MWindow); + MSceneManager::TransitionMode transitionMode; + + bool animatedOrientationChange = true; + + + if (q->property(AnimatedOrientationChangePropertyName).isValid()) { + animatedOrientationChange = q->property(AnimatedOrientationChangePropertyName).toBool(); + } + + if (animatedOrientationChange && q->isVisible()) { + transitionMode = MSceneManager::AnimatedTransition; + } else { + transitionMode = MSceneManager::ImmediateTransition; + } + + return transitionMode; +} + void MWindowPrivate::handleWindowStateChangeEvent(QWindowStateChangeEvent *event) { Q_Q(MWindow); @@ -964,11 +987,8 @@ void MWindow::setOrientationAngle(M::OrientationAngle angle) d->angle = angle; if (d->sceneManager) { - MSceneManager::TransitionMode mode = isVisible() ? - MSceneManager::AnimatedTransition : - MSceneManager::ImmediateTransition; - - d->sceneManager->setOrientationAngle(angle, mode); + d->sceneManager->setOrientationAngle(angle, + d->orientationChangeTransitionMode()); } else { // first notify widgets, then emit the signal (in case someone // would like to connect to the signal and get correct size hints for widgets) @@ -1336,4 +1356,10 @@ bool MWindow::closeOnLazyShutdown() const return d->closeOnLazyShutdown; } +int MWindow::orientationChangeTransitionMode() +{ + Q_D(MWindow); + return d->orientationChangeTransitionMode(); +} + #include "moc_mwindow.cpp" diff --git a/src/corelib/widgets/mwindow.h b/src/corelib/widgets/mwindow.h index bb1bee1d..dce59cf8 100644 --- a/src/corelib/widgets/mwindow.h +++ b/src/corelib/widgets/mwindow.h @@ -534,6 +534,12 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_updateMinimizedSoftwareSwitch()) #endif + /* + For testing purposes. + Returns a MSceneManager::TransitionMode + */ + int orientationChangeTransitionMode(); + friend class MApplicationPrivate; friend class MSceneManagerPrivate; #ifdef UNIT_TEST diff --git a/src/corelib/widgets/mwindow_p.h b/src/corelib/widgets/mwindow_p.h index 2fab7dd9..62bee047 100644 --- a/src/corelib/widgets/mwindow_p.h +++ b/src/corelib/widgets/mwindow_p.h @@ -53,6 +53,7 @@ public: bool debugShortcutModifiersPresent(Qt::KeyboardModifiers modifiers) const; void setVisible(bool visible); void _q_enablePaintUpdates(); + MSceneManager::TransitionMode orientationChangeTransitionMode(); #ifdef Q_WS_X11 void appendVisibilityChangeMask(); @@ -139,6 +140,4 @@ private: }; - - #endif diff --git a/src/corelib/widgets/widgets.pri b/src/corelib/widgets/widgets.pri index 4b2eb4de..682d2c2e 100644 --- a/src/corelib/widgets/widgets.pri +++ b/src/corelib/widgets/widgets.pri @@ -118,6 +118,7 @@ PRIVATE_HEADERS += \ $$WIDGETS_SRC_DIR/mpopuplist_p.h \ $$WIDGETS_SRC_DIR/mscenewindow_p.h \ $$WIDGETS_SRC_DIR/mstatusbar_p.h \ + $$WIDGETS_SRC_DIR/mwindow_p.h \ SOURCES += \ $$WIDGETS_SRC_DIR/mwidgetmodel.cpp \ diff --git a/tests/ut_mwindow/ut_mwindow.cpp b/tests/ut_mwindow/ut_mwindow.cpp index c07c7bc3..e73f8af9 100644 --- a/tests/ut_mwindow/ut_mwindow.cpp +++ b/tests/ut_mwindow/ut_mwindow.cpp @@ -26,6 +26,8 @@ #include "ut_mwindow.h" +Q_DECLARE_METATYPE(MSceneManager::TransitionMode) + bool MDeviceProfile::orientationAngleIsSupported(M::OrientationAngle angle, bool isKeyboardOpen) const { Q_UNUSED(isKeyboardOpen); @@ -469,4 +471,47 @@ void Ut_MWindow::testSetPortraitOrientation() QCOMPARE(win->orientationAngle(), portraitAngle); } +void Ut_MWindow::testAnimatedOrientationChangeProperty_data() +{ + QTest::addColumn<bool>("defineAnimatedOrientationChangeProperty"); + QTest::addColumn<bool>("propertyValue"); + QTest::addColumn<bool>("setVisibleValue"); + QTest::addColumn<MSceneManager::TransitionMode>("expectedTransitionMode"); + + QTest::newRow("invisible window, undefined property") + << false << false << false << MSceneManager::ImmediateTransition; + + QTest::newRow("invisible window, property false") + << true << false << false << MSceneManager::ImmediateTransition; + + QTest::newRow("invisible window, property true") + << true << true << false << MSceneManager::ImmediateTransition; + + QTest::newRow("visible window, property true") + << true << true << true << MSceneManager::AnimatedTransition; + + QTest::newRow("visible window, property false") + << true << false << true << MSceneManager::ImmediateTransition; + + QTest::newRow("visible window, property undefined") + << false << false << true << MSceneManager::AnimatedTransition; +} + +void Ut_MWindow::testAnimatedOrientationChangeProperty() +{ + QFETCH(bool, defineAnimatedOrientationChangeProperty); + QFETCH(bool, propertyValue); + QFETCH(bool, setVisibleValue); + QFETCH(MSceneManager::TransitionMode, expectedTransitionMode); + + if (defineAnimatedOrientationChangeProperty) + win->setProperty("animatedOrientationChange", propertyValue); + + win->setVisible(setVisibleValue); + + MSceneManager::TransitionMode actualTransitionMode = + static_cast<MSceneManager::TransitionMode>(win->orientationChangeTransitionMode()); + QCOMPARE(actualTransitionMode, expectedTransitionMode); +} + QTEST_MAIN(Ut_MWindow); diff --git a/tests/ut_mwindow/ut_mwindow.h b/tests/ut_mwindow/ut_mwindow.h index cd9ffc13..e08bb69f 100644 --- a/tests/ut_mwindow/ut_mwindow.h +++ b/tests/ut_mwindow/ut_mwindow.h @@ -24,6 +24,7 @@ #include <QObject> #include <MNamespace> #include <MComponentData> +#include <MSceneManager> class MWindow; class MApplication; @@ -72,6 +73,9 @@ private slots: void testSetPortraitOrientation_data(); void testSetPortraitOrientation(); + void testAnimatedOrientationChangeProperty_data(); + void testAnimatedOrientationChangeProperty(); + public slots: void onDisplayTestSlot(); |