aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel d'Andrada <daniel.dandrada@nokia.com>2010-11-15 15:36:28 +0200
committerDominik Kapusta <dominik.kapusta@teleca.com>2010-11-16 11:24:13 +0100
commitbecb4654219d48b758213799b4c97a306eaced80 (patch)
tree82a66e2919753a40978a376fd4ad994f8c37fc89
parentcecf0252f72b88a8641eae19d4473367499fa690 (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.cpp36
-rw-r--r--src/corelib/widgets/mwindow.h6
-rw-r--r--src/corelib/widgets/mwindow_p.h3
-rw-r--r--src/corelib/widgets/widgets.pri1
-rw-r--r--tests/ut_mwindow/ut_mwindow.cpp45
-rw-r--r--tests/ut_mwindow/ut_mwindow.h4
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();