From 073848f3c44911399b002ab01e3ae2e22bdfa8ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wierci=C5=84ski?= Date: Thu, 23 Feb 2023 14:34:48 +0100 Subject: [PATCH] wasm: fix respecting minimum size of QWasmWindow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/plugins/platforms/wasm/qwasmwindow.cpp | 16 ++++++++++------ src/plugins/platforms/wasm/qwasmwindow.h | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp index 9294bb7ab5..9ee3c37f85 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.cpp +++ b/src/plugins/platforms/wasm/qwasmwindow.cpp @@ -187,14 +187,16 @@ void QWasmWindow::initialize() { QRect rect = windowGeometry(); - constexpr int minSizeBoundForDialogsAndRegularWindows = 100; const auto windowFlags = window()->flags(); - const int systemMinSizeLowerBound = windowFlags.testAnyFlags(Qt::Window | Qt::Dialog) - ? minSizeBoundForDialogsAndRegularWindows - : 0; + const bool shouldRestrictMinSize = + !windowFlags.testFlag(Qt::FramelessWindowHint) && !windowIsPopupType(windowFlags); + const bool isMinSizeUninitialized = window()->minimumSize() == QSize(0, 0); - const QSize minimumSize(std::max(windowMinimumSize().width(), systemMinSizeLowerBound), - std::max(windowMinimumSize().height(), systemMinSizeLowerBound)); + if (shouldRestrictMinSize && isMinSizeUninitialized) + window()->setMinimumSize(QSize(minSizeForRegularWindows, minSizeForRegularWindows)); + + + const QSize minimumSize = windowMinimumSize(); const QSize maximumSize = windowMaximumSize(); const QSize targetSize = !rect.isEmpty() ? rect.size() : minimumSize; @@ -256,6 +258,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 c233ef8123..c6a4ba2418 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.h +++ b/src/plugins/platforms/wasm/qwasmwindow.h @@ -92,6 +92,7 @@ public: private: friend class QWasmScreen; + static constexpr auto minSizeForRegularWindows = 100; void invalidate(); bool hasFrame() const;