summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Wierciński <[email protected]>2023-02-23 14:34:48 +0100
committerPiotr Wierciński <[email protected]>2023-06-30 09:44:47 +0200
commite2bb4668bc2d074faf29bffe8dbe139df8759fbd (patch)
treea235ee3addb0a65cf069870731e2fb059622d577
parent38e6863a43addc16c53dea777697a09993638396 (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.cpp20
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.h1
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;