Also honour QSizePolicy::Maximum

It's yet another way to say you want a max size
This commit is contained in:
Sergio Martins
2020-06-07 20:14:50 +01:00
parent daa220d513
commit 7f9d160658
2 changed files with 27 additions and 2 deletions

View File

@@ -144,9 +144,9 @@ QSize Widget_qwidget::widgetMaxSize(const QWidget *w)
const QSizePolicy policy = w->sizePolicy();
if (policy.verticalPolicy() == QSizePolicy::Fixed)
if (policy.verticalPolicy() == QSizePolicy::Fixed || policy.verticalPolicy() == QSizePolicy::Maximum)
max.setHeight(qMin(max.height(), w->sizeHint().height()));
if (policy.horizontalPolicy() == QSizePolicy::Fixed)
if (policy.horizontalPolicy() == QSizePolicy::Fixed || policy.horizontalPolicy() == QSizePolicy::Maximum)
max.setWidth(qMin(max.width(), w->sizeHint().width()));
max = boundedMaxSize(min, max); // for safety against weird values

View File

@@ -357,6 +357,7 @@ private Q_SLOTS:
void tst_maxSizePropagates();
void tst_maxSizeHonouredWhenDropped();
void tst_fixedSizePolicy();
void tst_maximumSizePolicy();
private:
std::unique_ptr<MultiSplitter> createMultiSplitterFromSetup(MultiSplitterSetup setup, QHash<QWidget *, Frame *> &frameMap) const;
@@ -5417,6 +5418,30 @@ void TestDocks::tst_fixedSizePolicy()
delete dock1->window();
}
void TestDocks::tst_maximumSizePolicy()
{
EnsureTopLevelsDeleted e;
auto widget = new MyWidget2();
const int maxHeight = 250;
widget->setMinSize(QSize(200, 200));
widget->setSizeHint(QSize(250, maxHeight));
widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
auto dock1 = createDockWidget("dock1", widget);
dock1->show();
dock1->window()->resize(QSize(500, 500));
auto oldFw = dock1->window();
dock1->close();
dock1->show();
QVERIFY(dock1->window()->height() <= maxHeight + 20); // + 20 as the floating window is a bit bigger, due to margins etc.
QVERIFY(dock1->height() <= maxHeight);
delete oldFw;
delete dock1->window();
}
int main(int argc, char *argv[])
{
if (!qpaPassedAsArgument(argc, argv)) {