summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorPiotr Wierciński <[email protected]>2023-02-23 14:34:48 +0100
committerPiotr Wierciński <[email protected]>2023-03-05 09:31:06 +0100
commit073848f3c44911399b002ab01e3ae2e22bdfa8ff (patch)
treeec13c2791689adade455459bd49ac7f63db26fd4 /src/plugins
parent9e31631557ea3f99506377ff91a1e15e942f9e88 (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]>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.cpp16
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.h1
2 files changed, 11 insertions, 6 deletions
diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp
index 9294bb7ab50..9ee3c37f85e 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 c233ef81239..c6a4ba2418c 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;