summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
index b31acb2b7a..e30df32d5d 100644
--- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
+++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
@@ -126,6 +126,8 @@ private slots:
void dockWidgetArea();
void restoreState();
void restoreStateFromPreviousVersion();
+ void restoreStateSizeChanged_data();
+ void restoreStateSizeChanged();
void createPopupMenu();
void hideBeforeLayout();
#ifdef QT_BUILD_INTERNAL
@@ -1391,6 +1393,67 @@ void tst_QMainWindow::restoreStateFromPreviousVersion()
}
+void tst_QMainWindow::restoreStateSizeChanged_data()
+{
+ QTest::addColumn<Qt::WindowState>("saveState");
+ QTest::addColumn<Qt::WindowState>("showState");
+ QTest::addColumn<bool>("sameSize");
+
+ QTest::addRow("fullscreen") << Qt::WindowFullScreen << Qt::WindowFullScreen << true;
+ QTest::addRow("maximized") << Qt::WindowMaximized << Qt::WindowMaximized << true;
+ QTest::addRow("maximized->normal") << Qt::WindowMaximized << Qt::WindowNoState << false;
+ QTest::addRow("fullscreen->normal") << Qt::WindowFullScreen << Qt::WindowNoState << false;
+ QTest::addRow("fullscreen->maximized") << Qt::WindowFullScreen << Qt::WindowMaximized << false;
+ QTest::addRow("maximized->fullscreen") << Qt::WindowMaximized << Qt::WindowFullScreen << true;
+}
+
+void tst_QMainWindow::restoreStateSizeChanged()
+{
+ QFETCH(Qt::WindowState, saveState);
+ QFETCH(Qt::WindowState, showState);
+ QFETCH(bool, sameSize);
+
+ auto createMainWindow = []{
+ QMainWindow *mainWindow = new QMainWindow;
+ mainWindow->move(QGuiApplication::primaryScreen()->availableGeometry().topLeft());
+ mainWindow->setCentralWidget(new QLabel("X"));
+ QDockWidget *dockWidget = new QDockWidget;
+ dockWidget->setObjectName("Dock Widget");
+ mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
+ return mainWindow;
+ };
+
+ QByteArray geometryData;
+ QByteArray stateData;
+ int dockWidgetWidth = 0;
+ QRect normalGeometry;
+
+ {
+ auto mainWindow = QScopedPointer<QMainWindow>(createMainWindow());
+ mainWindow->setWindowState(saveState);
+ mainWindow->show();
+ QVERIFY(QTest::qWaitForWindowExposed(mainWindow.data()));
+ dockWidgetWidth = mainWindow->width() - 100;
+ QDockWidget *dockWidget = mainWindow->findChild<QDockWidget*>("Dock Widget");
+ mainWindow->resizeDocks({dockWidget}, {dockWidgetWidth}, Qt::Horizontal);
+ geometryData = mainWindow->saveGeometry();
+ stateData = mainWindow->saveState();
+ normalGeometry = mainWindow->normalGeometry();
+ }
+
+ auto mainWindow = QScopedPointer<QMainWindow>(createMainWindow());
+ mainWindow->restoreGeometry(geometryData);
+ mainWindow->restoreState(stateData);
+ mainWindow->setWindowState(showState);
+ mainWindow->show();
+ QVERIFY(QTest::qWaitForWindowExposed(mainWindow.data()));
+
+ QDockWidget *dockWidget = mainWindow->findChild<QDockWidget*>("Dock Widget");
+ QVERIFY(dockWidget);
+ QCOMPARE(mainWindow->normalGeometry().size(), normalGeometry.size());
+ if (sameSize)
+ QTRY_COMPARE(dockWidget->width(), dockWidgetWidth);
+}
void tst_QMainWindow::createPopupMenu()
{
@@ -1692,6 +1755,7 @@ void tst_QMainWindow::saveRestore()
adw.apply(&mainWindow);
mainWindow.show();
+
mainWindow.restoreState(stateData);
COMPARE_DOCK_WIDGET_GEOS(dockWidgetGeos, dockWidgetGeometries(&mainWindow));
@@ -1710,6 +1774,7 @@ void tst_QMainWindow::saveRestore()
mainWindow.restoreState(stateData);
mainWindow.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&mainWindow));
COMPARE_DOCK_WIDGET_GEOS(dockWidgetGeos, dockWidgetGeometries(&mainWindow));
}
}