diff options
author | Jussi Lind <jussi.lind@nokia.com> | 2010-10-26 12:52:22 +0300 |
---|---|---|
committer | Daniel d'Andrada <daniel.dandrada@nokia.com> | 2010-11-18 10:12:11 +0200 |
commit | 8f0617c03286ec5b46fa6bb33ce819dff0f8ec72 (patch) | |
tree | 91e5f159954279e81a7d9461ed2da551d12f4aea | |
parent | 2f0a9380a51496e002ed3079ec414bc012a02426 (diff) |
Changes: Update on-display visibility after orientation change.
RevBy: Daniel d'Andrada
ModifiedBy: Daniel d'Andrada
- Adapted test code to not use the now removed test bridge.
-rw-r--r-- | src/corelib/scene/mscenemanager.cpp | 16 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager.h | 2 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager_p.h | 1 | ||||
-rw-r--r-- | tests/ut_mscenemanager/ut_mscenemanager.cpp | 64 | ||||
-rw-r--r-- | tests/ut_mscenemanager/ut_mscenemanager.h | 1 |
5 files changed, 83 insertions, 1 deletions
diff --git a/src/corelib/scene/mscenemanager.cpp b/src/corelib/scene/mscenemanager.cpp index ac7885fe..a35a4066 100644 --- a/src/corelib/scene/mscenemanager.cpp +++ b/src/corelib/scene/mscenemanager.cpp @@ -191,6 +191,7 @@ void MSceneManagerPrivate::createOrientationAnimation() q->connect(orientationAnimation, SIGNAL(finished()), SLOT(_q_applySceneWindowTransitionsQueuedDueToOrientationAnimation())); q->connect(orientationAnimation, SIGNAL(finished()), SLOT(_q_triggerAsyncPendingOrientationChange())); + q->connect(orientationAnimation, SIGNAL(finished()), SLOT(_q_updateOnDisplayVisibility())); } MSceneManagerPrivate::~MSceneManagerPrivate() @@ -390,6 +391,13 @@ void MSceneManagerPrivate::removeSceneWindowFromTransitionQueue(MSceneWindow *sc } } +void MSceneManagerPrivate::_q_updateOnDisplayVisibility() +{ + if (currentPage) { + produceMustBeResolvedDisplayEvent(currentPage); + } +} + void MSceneManagerPrivate::_q_triggerAsyncPendingOrientationChange() { Q_Q(MSceneManager); @@ -929,6 +937,7 @@ void MSceneManagerPrivate::setOrientationAngleWithoutAnimation(M::OrientationAng } _q_emitOrientationChangeFinished(); + _q_updateOnDisplayVisibility(); } bool MSceneManagerPrivate::isOnDisplay() @@ -1921,7 +1930,6 @@ void MSceneManagerPrivate::fastForwardSceneWindowTransitionAnimation(MSceneWindo } } - MSceneManagerStyleContainer &MSceneManagerPrivate::style() { Q_Q(MSceneManager); @@ -2205,6 +2213,12 @@ void MSceneManager::fastForwardPageSwitchAnimation() d->pageSwitchAnimation->setCurrentTime(d->pageSwitchAnimation->duration()); } +void MSceneManager::fastForwardOrientationChangeAnimation() +{ + Q_D(MSceneManager); + d->orientationAnimation->setCurrentTime(d->orientationAnimation->duration()); +} + void MSceneManager::fastForwardSceneWindowTransitionAnimation(MSceneWindow *sceneWindow) { Q_D(MSceneManager); diff --git a/src/corelib/scene/mscenemanager.h b/src/corelib/scene/mscenemanager.h index 5aa781d8..1e87475b 100644 --- a/src/corelib/scene/mscenemanager.h +++ b/src/corelib/scene/mscenemanager.h @@ -330,6 +330,7 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_dislocateSceneWindow(MSceneWindow *, QPointF)) Q_PRIVATE_SLOT(d_func(), void _q_undoSceneWindowDislocation(MSceneWindow *sceneWindow)) Q_PRIVATE_SLOT(d_func(), void _q_updateRootElementsPositions()) + Q_PRIVATE_SLOT(d_func(), void _q_updateOnDisplayVisibility()) #ifdef Q_WS_X11 Q_PRIVATE_SLOT(d_func(), void _q_updateDecoratorButtonsProperty()) #endif @@ -338,6 +339,7 @@ private: Methods for testing purposes */ void fastForwardPageSwitchAnimation(); + void fastForwardOrientationChangeAnimation(); void fastForwardSceneWindowTransitionAnimation(MSceneWindow *sceneWindow); void addSceneWindow(MSceneWindow *sceneWindow); void removeSceneWindow(MSceneWindow *sceneWindow); diff --git a/src/corelib/scene/mscenemanager_p.h b/src/corelib/scene/mscenemanager_p.h index b619185e..81947fb5 100644 --- a/src/corelib/scene/mscenemanager_p.h +++ b/src/corelib/scene/mscenemanager_p.h @@ -199,6 +199,7 @@ public: void _q_onSceneWindowAppearanceAnimationFinished(); void _q_onSceneWindowDisappearanceAnimationFinished(); void _q_onPageSwitchAnimationFinished(); + void _q_updateOnDisplayVisibility(); void _q_unFreezeUI(); diff --git a/tests/ut_mscenemanager/ut_mscenemanager.cpp b/tests/ut_mscenemanager/ut_mscenemanager.cpp index dfbb3a4f..84eee07a 100644 --- a/tests/ut_mscenemanager/ut_mscenemanager.cpp +++ b/tests/ut_mscenemanager/ut_mscenemanager.cpp @@ -64,6 +64,21 @@ bool MWindow::isOnDisplay() const return gMWindowIsOnDisplay; } +class EventTestPage : public MApplicationPage +{ +public: + QRectF latestViewRect; + bool mustBeResolvedReceived; +protected: + virtual void onDisplayChangeEvent(MOnDisplayChangeEvent * event) { + if (event->state() == MOnDisplayChangeEvent::MustBeResolved) { + mustBeResolvedReceived = true; + latestViewRect = event->viewRect(); + MSceneWindow::onDisplayChangeEvent(event); + } + } +}; + // Test class implementation void Ut_MSceneManager::initTestCase() @@ -270,6 +285,55 @@ void Ut_MSceneManager::testNoOrientationChangedSignalWhenRotatingBy180Degrees() QCOMPARE(finishedSpy.count(), 1); } +void Ut_MSceneManager::testOrientationChangeVisibility() +{ + gMWindowIsOnDisplay = true; + + // Create page to catch MOnDisplayChangeEvent's + EventTestPage *win = new EventTestPage; + sm->appearSceneWindowNow(win); + + // Init with landscape + sm->setOrientationAngle(M::Angle0, MSceneManager::ImmediateTransition); + + const int height = win->geometry().height(); + const int width = win->geometry().width(); + + // Rotate to portrait, immediately + win->mustBeResolvedReceived = false; + sm->setOrientationAngle(M::Angle90, MSceneManager::ImmediateTransition); + QVERIFY(win->mustBeResolvedReceived == true); + QVERIFY(win->latestViewRect == QRectF(0, 0, height, width)); + + // Rotate to landscape, immediately + win->mustBeResolvedReceived = false; + sm->setOrientationAngle(M::Angle0, MSceneManager::ImmediateTransition); + QVERIFY(win->mustBeResolvedReceived == true); + QVERIFY(win->latestViewRect == QRectF(0, 0, width, height)); + + // Rotate back to portrait, immediately + win->mustBeResolvedReceived = false; + sm->setOrientationAngle(M::Angle90, MSceneManager::ImmediateTransition); + QVERIFY(win->mustBeResolvedReceived == true); + QVERIFY(win->latestViewRect == QRectF(0, 0, height, width)); + + // Rotate to landscape, animatedly + win->mustBeResolvedReceived = false; + sm->setOrientationAngle(M::Angle0); + QVERIFY(win->mustBeResolvedReceived == false); + sm->fastForwardOrientationChangeAnimation(); + QVERIFY(win->mustBeResolvedReceived == true); + QVERIFY(win->latestViewRect == QRectF(0, 0, width, height)); + + // Rotate back to portrait, animatedly + win->mustBeResolvedReceived = false; + sm->setOrientationAngle(M::Angle90); + QVERIFY(win->mustBeResolvedReceived == false); + sm->fastForwardOrientationChangeAnimation(); + QVERIFY(win->mustBeResolvedReceived == true); + QVERIFY(win->latestViewRect == QRectF(0, 0, height, width)); +} + // Test uses non-exported symbol "MDockWidget". /* void Ut_MSceneManager::testNavBarDockWidgetVisibility() diff --git a/tests/ut_mscenemanager/ut_mscenemanager.h b/tests/ut_mscenemanager/ut_mscenemanager.h index 7109ad66..eca89058 100644 --- a/tests/ut_mscenemanager/ut_mscenemanager.h +++ b/tests/ut_mscenemanager/ut_mscenemanager.h @@ -57,6 +57,7 @@ private slots: void testInitialOrientation(); void testOrientationChangedSignal(); void testNoOrientationChangedSignalWhenRotatingBy180Degrees(); + void testOrientationChangeVisibility(); //void testNavBarDockWidgetVisibility(); void testAngleBoundaryCases(); void testSceneSizes(); |