diff options
author | Piotr Wierciński <[email protected]> | 2023-02-23 14:34:48 +0100 |
---|---|---|
committer | Piotr Wierciński <[email protected]> | 2023-06-30 09:44:47 +0200 |
commit | e2bb4668bc2d074faf29bffe8dbe139df8759fbd (patch) | |
tree | a235ee3addb0a65cf069870731e2fb059622d577 | |
parent | 38e6863a43addc16c53dea777697a09993638396 (diff) |
wasm: fix respecting minimum size of QWasmWindow
Minimum size of QWasmWindow was not properly enforced.
Make sure that minimumu size constraints are respected
when the QWasmWindow is created, resized manually or
changed by setGeometry().
Fixes: QTBUG-111162
Change-Id: I2984b0836b5b53f9163275153d734cb1d81ef3b6
Reviewed-by: Mikołaj Boc <[email protected]>
(cherry picked from commit 073848f3c44911399b002ab01e3ae2e22bdfa8ff)
Reviewed-by: Morten Johan Sørvig <[email protected]>
-rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.cpp | 20 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.h | 1 |
2 files changed, 13 insertions, 8 deletions
diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp index dfe6bf413c7..638d78b5b52 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.cpp +++ b/src/plugins/platforms/wasm/qwasmwindow.cpp @@ -194,14 +194,16 @@ void QWasmWindow::initialize() { QRect rect = windowGeometry(); - constexpr int minSizeBoundForDialogsAndRegularWindows = 100; - const int windowType = window()->flags() & Qt::WindowType_Mask; - const int systemMinSizeLowerBound = windowType == Qt::Window || windowType == Qt::Dialog - ? minSizeBoundForDialogsAndRegularWindows - : 0; - - const QSize minimumSize(std::max(windowMinimumSize().width(), systemMinSizeLowerBound), - std::max(windowMinimumSize().height(), systemMinSizeLowerBound)); + const auto windowFlags = window()->flags(); + const bool shouldRestrictMinSize = + !windowFlags.testFlag(Qt::FramelessWindowHint) && !windowIsPopupType(windowFlags); + const bool isMinSizeUninitialized = window()->minimumSize() == QSize(0, 0); + + if (shouldRestrictMinSize && isMinSizeUninitialized) + window()->setMinimumSize(QSize(minSizeForRegularWindows, minSizeForRegularWindows)); + + + const QSize minimumSize = windowMinimumSize(); const QSize maximumSize = windowMaximumSize(); const QSize targetSize = !rect.isEmpty() ? rect.size() : minimumSize; @@ -265,6 +267,8 @@ void QWasmWindow::setGeometry(const QRect &rect) QRect result(rect); result.moveTop(std::max(std::min(rect.y(), screenGeometry.bottom()), screenGeometry.y() + margins.top())); + result.setSize( + result.size().expandedTo(windowMinimumSize()).boundedTo(windowMaximumSize())); return result; })(); m_nonClientArea->onClientAreaWidthChange(clientAreaRect.width()); diff --git a/src/plugins/platforms/wasm/qwasmwindow.h b/src/plugins/platforms/wasm/qwasmwindow.h index 2b5e950ebc4..3236757aee3 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.h +++ b/src/plugins/platforms/wasm/qwasmwindow.h @@ -94,6 +94,7 @@ public: private: friend class QWasmScreen; + static constexpr auto minSizeForRegularWindows = 100; void invalidate(); bool hasFrame() const; |