diff --git a/src/DockWidgetQuick.cpp b/src/DockWidgetQuick.cpp index d2906af5..1dd8296b 100644 --- a/src/DockWidgetQuick.cpp +++ b/src/DockWidgetQuick.cpp @@ -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(); +} diff --git a/src/DockWidgetQuick.h b/src/DockWidgetQuick.h index 200b7c47..7c9a9f38 100644 --- a/src/DockWidgetQuick.h +++ b/src/DockWidgetQuick.h @@ -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; diff --git a/src/private/quick/QWidgetAdapter_quick.cpp b/src/private/quick/QWidgetAdapter_quick.cpp index fb288b9c..bc60fab3 100644 --- a/src/private/quick/QWidgetAdapter_quick.cpp +++ b/src/private/quick/QWidgetAdapter_quick.cpp @@ -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(); } } diff --git a/src/private/quick/QWidgetAdapter_quick_p.h b/src/private/quick/QWidgetAdapter_quick_p.h index e465396a..c4b1e009 100644 --- a/src/private/quick/QWidgetAdapter_quick_p.h +++ b/src/private/quick/QWidgetAdapter_quick_p.h @@ -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; } diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index 1dc6d312..87854a73 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -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() {