summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorInho Lee <inho.lee@qt.io>2023-05-09 10:58:13 +0200
committerInho Lee <inho.lee@qt.io>2023-05-09 11:15:27 +0000
commit42128ec10e2365b5235a80ebc0bb429402b8f95f (patch)
treeb282b6646dee2ecd0eed692be3d2f4745d8115fb /src
parentf8e0c3aeac41bfb3d6111219f467032451415b39 (diff)
downloadqtwayland-42128ec10e2365b5235a80ebc0bb429402b8f95f.tar.gz
Apply only valid min/max sizes
When setting min/max sizes, the minimum size can be larger than the maximum size. In that case, the size hint won't be applied to the geometry. Setting size hint will be pending until the min/max pair is valid and the actual geometry will not be changed with the invalid size hint. Fixes: QTBUG-113233 Pick-to: 6.5 6.5.1 6.2 Change-Id: Ia05944e8342e7f8d794aee7883e0637a4c711c9d Reviewed-by: David Edmundson <davidedmundson@kde.org>
Diffstat (limited to 'src')
-rw-r--r--src/client/qwaylandwindow.cpp12
-rw-r--r--src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp12
2 files changed, 17 insertions, 7 deletions
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 7634aedd..4ca2d8e6 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -394,9 +394,15 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect)
{
QSize minimum = windowMinimumSize();
QSize maximum = windowMaximumSize();
- QPlatformWindow::setGeometry(QRect(rect.x(), rect.y(),
- qBound(minimum.width(), rect.width(), maximum.width()),
- qBound(minimum.height(), rect.height(), maximum.height())));
+ int width = windowGeometry().width();
+ int height = windowGeometry().height();
+ if (minimum.width() <= maximum.width()
+ && minimum.height() <= maximum.height()) {
+ width = qBound(minimum.width(), rect.width(), maximum.width());
+ height = qBound(minimum.height(), rect.height(), maximum.height());
+ }
+
+ QPlatformWindow::setGeometry(QRect(rect.x(), rect.y(), width, height));
if (mViewport)
updateViewport();
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index bf6eb2d0..a16fd8cc 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -410,14 +410,18 @@ void QWaylandXdgSurface::setSizeHints()
if (m_toplevel && m_window) {
const int minWidth = qMax(0, m_window->windowMinimumSize().width());
const int minHeight = qMax(0, m_window->windowMinimumSize().height());
- m_toplevel->set_min_size(minWidth, minHeight);
-
- int maxWidth = qMax(minWidth, m_window->windowMaximumSize().width());
+ int maxWidth = qMax(0, m_window->windowMaximumSize().width());
+ int maxHeight = qMax(0, m_window->windowMaximumSize().height());
if (maxWidth == QWINDOWSIZE_MAX)
maxWidth = 0;
- int maxHeight = qMax(minHeight, m_window->windowMaximumSize().height());
if (maxHeight == QWINDOWSIZE_MAX)
maxHeight = 0;
+
+ // It will not change min/max sizes if invalid.
+ if (minWidth > maxHeight || minHeight > maxHeight)
+ return;
+
+ m_toplevel->set_min_size(minWidth, minHeight);
m_toplevel->set_max_size(maxWidth, maxHeight);
}
}