diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index 3ab8632f805..1167524a0aa 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -2318,7 +2318,14 @@ void QMdiArea::resizeEvent(QResizeEvent *resizeEvent) foreach (QMdiSubWindow *child, d->childWindows) { if (sanityCheck(child, "QMdiArea::resizeEvent") && child->isMaximized() && child->size() != resizeEvent->size()) { - child->resize(resizeEvent->size()); + auto realSize = resizeEvent->size(); + const auto minSizeHint = child->minimumSizeHint(); + // QMdiSubWindow is no tlw so minimumSize() is not set by the layout manager + // and therefore we have to take care by ourself that we're not getting smaller + // than allowed + if (minSizeHint.isValid()) + realSize = realSize.expandedTo(minSizeHint); + child->resize(realSize); if (!hasMaximizedSubWindow) hasMaximizedSubWindow = true; } diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp index b19fb3f9899..9c51b3c8a45 100644 --- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp +++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -221,6 +222,7 @@ private slots: void styleChange(); void testFullScreenState(); void testRemoveBaseWidget(); + void testRespectMinimumSize(); }; void tst_QMdiSubWindow::initTestCase() @@ -2163,6 +2165,36 @@ void tst_QMdiSubWindow::testRemoveBaseWidget() delete widget1; } +void tst_QMdiSubWindow::testRespectMinimumSize() // QTBUG-100494 +{ + QMdiArea mdiArea; + mdiArea.resize(400, 400); + mdiArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + mdiArea.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + + auto vlay = new QVBoxLayout; + vlay->addWidget(new QPushButton(QLatin1String("btn1-1"))); + vlay->addSpacerItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); + vlay->addWidget(new QPushButton(QLatin1String("btn1-2"))); + auto w1 = new QWidget; + w1->setLayout(vlay); + w1->resize(300, 200); + w1->setMinimumSize(200, 150); + auto sw = new QMdiSubWindow; + sw->setWidget(w1); + sw->resize(w1->size()); + mdiArea.addSubWindow(sw); + sw->showMaximized(); + + mdiArea.show(); + QVERIFY(QTest::qWaitForWindowExposed(&mdiArea)); + QVERIFY(!mdiArea.horizontalScrollBar()->isVisible()); + QVERIFY(!mdiArea.verticalScrollBar()->isVisible()); + mdiArea.resize(150, 100); + QTRY_VERIFY(mdiArea.horizontalScrollBar()->isVisible()); + QTRY_VERIFY(mdiArea.verticalScrollBar()->isVisible()); +} + QTEST_MAIN(tst_QMdiSubWindow) #include "tst_qmdisubwindow.moc"