summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabian Bumberger <fbumberger@rim.com>2014-04-08 17:01:01 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-02 17:36:45 +0200
commit637b6e1097500235ca2146ae706b52ed9fc0effc (patch)
treef4ddeca866574a6315f4273f08bd6396d5e6523e
parent2567b35a5e14a704c3b33c17e4b39a940c033a4e (diff)
Ignore the fullscreen state of a QMdiSubWindow
On some platforms all windows are by default forced into fullscreen mode when show() is executed. In QMdiSubWindow we cannot handle the fullscreen state and should ignore it. Otherwise the window will be forced in "normal" state and ignore any previously executed geometry changes. Change-Id: I09ce6507a1eac6a0adb3405ca3f423642d30f801 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Bernd Weimer <bweimer@blackberry.com>
-rw-r--r--src/widgets/widgets/qmdisubwindow.cpp7
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp14
2 files changed, 19 insertions, 2 deletions
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp
index b1adb3f760..9104074122 100644
--- a/src/widgets/widgets/qmdisubwindow.cpp
+++ b/src/widgets/widgets/qmdisubwindow.cpp
@@ -1676,15 +1676,18 @@ void QMdiSubWindowPrivate::ensureWindowState(Qt::WindowState state)
switch (state) {
case Qt::WindowMinimized:
windowStates &= ~Qt::WindowMaximized;
+ windowStates &= ~Qt::WindowFullScreen;
windowStates &= ~Qt::WindowNoState;
break;
case Qt::WindowMaximized:
windowStates &= ~Qt::WindowMinimized;
+ windowStates &= ~Qt::WindowFullScreen;
windowStates &= ~Qt::WindowNoState;
break;
case Qt::WindowNoState:
windowStates &= ~Qt::WindowMinimized;
windowStates &= ~Qt::WindowMaximized;
+ windowStates &= ~Qt::WindowFullScreen;
break;
default:
break;
@@ -2732,7 +2735,7 @@ bool QMdiSubWindow::eventFilter(QObject *object, QEvent *event)
showMinimized();
else if (!(oldState & Qt::WindowMaximized) && (newState & Qt::WindowMaximized))
showMaximized();
- else if (!(newState & (Qt::WindowMaximized | Qt::WindowMinimized)))
+ else if (!(newState & (Qt::WindowMaximized | Qt::WindowMinimized | Qt::WindowFullScreen)))
showNormal();
break;
}
@@ -3005,7 +3008,7 @@ void QMdiSubWindow::changeEvent(QEvent *changeEvent)
d->setMinimizeMode();
else if (!(oldState & Qt::WindowMaximized) && (newState & Qt::WindowMaximized))
d->setMaximizeMode();
- else if (!(newState & (Qt::WindowMaximized | Qt::WindowMinimized)))
+ else if (!(newState & (Qt::WindowMaximized | Qt::WindowMinimized | Qt::WindowFullScreen)))
d->setNormalMode();
if (d->isActive)
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
index 268638a504..ffc3e3b67d 100644
--- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
+++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
@@ -206,6 +206,7 @@ private slots:
void task_233197();
void task_226929();
void styleChange();
+ void testFullScreenState();
};
void tst_QMdiSubWindow::initTestCase()
@@ -2007,6 +2008,19 @@ void tst_QMdiSubWindow::styleChange()
QCOMPARE(spy.count(), 0);
}
+void tst_QMdiSubWindow::testFullScreenState()
+{
+ QMdiArea mdiArea;
+ mdiArea.showMaximized();
+
+ QMdiSubWindow *subWindow = mdiArea.addSubWindow(new QWidget);
+ subWindow->setGeometry(0, 0, 300, 300);
+ subWindow->showFullScreen(); // QMdiSubWindow does not support the fullscreen state. This call
+ // should be equivalent to setVisible(true) (and not showNormal())
+ QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
+ QCOMPARE(subWindow->size(), QSize(300, 300));
+}
+
QTEST_MAIN(tst_QMdiSubWindow)
#include "tst_qmdisubwindow.moc"