Make DockWidgetQuick::minimumSize()/max virtual

While for QtWidgets we have layouts which propagate the constraints
up, for QtQuick we don't, so we need to override minimumSize instead
This commit is contained in:
Sergio Martins
2020-11-21 18:15:37 +00:00
parent a847a574ed
commit 801e49de9d
5 changed files with 49 additions and 6 deletions

View File

@@ -87,3 +87,23 @@ bool DockWidgetQuick::event(QEvent *e)
return DockWidgetBase::event(e);
}
QSize DockWidgetQuick::minimumSize() const
{
if (QWidgetAdapter *guestWidget = widget()) {
// The guests min-size is the same as the widget's, there's no spacing or margins.
return guestWidget->minimumSize();
}
return DockWidgetBase::minimumSize();
}
QSize DockWidgetQuick::maximumSize() const
{
if (QWidgetAdapter *guestWidget = widget()) {
// The guests max-size is the same as the widget's, there's no spacing or margins.
return guestWidget->maximumSize();
}
return DockWidgetBase::maximumSize();
}

View File

@@ -57,6 +57,12 @@ public:
/// @reimp
void setWidget(QWidgetOrQuick *widget) override;
/// @reimp
QSize minimumSize() const override;
/// @reimp
QSize maximumSize() const override;
protected:
bool event(QEvent *e) override;

View File

@@ -234,7 +234,7 @@ void QWidgetAdapter::setMinimumSize(QSize sz)
void QWidgetAdapter::setMaximumSize(QSize sz)
{
if (minimumSize() != sz) {
setProperty("kddockwidgets_min_size", sz);
setProperty("kddockwidgets_max_size", sz);
updateGeometry();
}
}

View File

@@ -99,8 +99,8 @@ public:
QSize size() const { return QQuickItem::size().toSize(); }
virtual QSize minimumSizeHint() const { return minimumSize(); }
QSize minimumSize() const;
QSize maximumSize() const;
virtual QSize minimumSize() const;
virtual QSize maximumSize() const;
int minimumHeight() const { return minimumSize().height(); }
int minimumWidth() const { return minimumSize().width(); }
bool hasFixedWidth() const { return false; }

View File

@@ -217,6 +217,10 @@ private Q_SLOTS:
void tst_close();
void tst_propagateSizeHonoursMinSize();
void tst_nonDockable();
void tst_floatingAction();
void tst_flagDoubleClick();
void tst_constraintsPropagateUp();
void tst_constraintsAfterPlaceholder();
void tst_addToSmallMainWindow1();
void tst_addToSmallMainWindow2();
@@ -236,9 +240,7 @@ private Q_SLOTS:
void tst_restoreSimple();
void tst_restoreSimplest();
void tst_lastFloatingPositionIsRestored();
void tst_floatingAction();
void tst_flagDoubleClick();
void tst_constraintsAfterPlaceholder();
void tst_minSizeChanges();
void tst_maximumSizePolicy();
#ifdef KDDOCKWIDGETS_QTWIDGETS
@@ -6093,6 +6095,21 @@ void TestDocks::tst_propagateSizeHonoursMinSize()
min1 = widgetMinLength(dock1, Qt::Vertical);
QVERIFY(dock1->height() >= min1);
}
void TestDocks::tst_constraintsPropagateUp()
{
// Mostly for QtQuick, which doesn't have any layouts, so we need to make the propagation
// Manually in DockWidgetQuick::minimumSize(), in FrameQuick, etc.
EnsureTopLevelsDeleted e;
const int minHeight = 400;
auto guestWidget = new MyWidget2(QSize(400, minHeight));
auto dock1 = createDockWidget("dock1", guestWidget);
QCOMPARE(widgetMinLength(guestWidget, Qt::Vertical), minHeight);
QCOMPARE(dock1->minimumHeight(), minHeight);
delete dock1->window();
}
void TestDocks::tst_constraintsAfterPlaceholder()
{