summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
}
}