aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Lind <jussi.lind@nokia.com>2010-10-26 12:52:22 +0300
committerDaniel d'Andrada <daniel.dandrada@nokia.com>2010-11-18 10:12:11 +0200
commit8f0617c03286ec5b46fa6bb33ce819dff0f8ec72 (patch)
tree91e5f159954279e81a7d9461ed2da551d12f4aea
parent2f0a9380a51496e002ed3079ec414bc012a02426 (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.cpp16
-rw-r--r--src/corelib/scene/mscenemanager.h2
-rw-r--r--src/corelib/scene/mscenemanager_p.h1
-rw-r--r--tests/ut_mscenemanager/ut_mscenemanager.cpp64
-rw-r--r--tests/ut_mscenemanager/ut_mscenemanager.h1
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();