diff options
-rw-r--r-- | src/client/qwaylandwindow.cpp | 12 | ||||
-rw-r--r-- | src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | 12 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index bb1d944c..abab795c 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -369,9 +369,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 eebfb9e0..8e41e5a7 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -416,14 +416,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); } } |