diff options
Diffstat (limited to 'src/plugins/shellintegration/xdg-shell')
-rw-r--r-- | src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | 30 | ||||
-rw-r--r-- | src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h | 3 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp index cabba5b3b..fc515ca1b 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -46,6 +46,8 @@ #include <QtWaylandClient/private/qwaylandscreen_p.h> #include <QtWaylandClient/private/qwaylandabstractdecoration_p.h> +#include <QtGui/private/qwindow_p.h> + QT_BEGIN_NAMESPACE namespace QtWaylandClient { @@ -104,6 +106,9 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() QSize windowGeometrySize = m_xdgSurface->m_window->window()->frameGeometry().size(); m_xdgSurface->set_window_geometry(0, 0, windowGeometrySize.width(), windowGeometrySize.height()); + + m_xdgSurface->setSizeHints(); + m_applied = m_pending; qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states; } @@ -339,6 +344,31 @@ bool QWaylandXdgSurface::wantsDecorations() const return m_toplevel && m_toplevel->wantsDecorations(); } +void QWaylandXdgSurface::propagateSizeHints() +{ + setSizeHints(); + + if (m_toplevel && m_window) + m_window->commit(); +} + +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(0, m_window->windowMaximumSize().width()); + if (maxWidth == QWINDOWSIZE_MAX) + maxWidth = 0; + int maxHeight = qMax(0, m_window->windowMaximumSize().height()); + if (maxHeight == QWINDOWSIZE_MAX) + maxHeight = 0; + m_toplevel->set_max_size(maxWidth, maxHeight); + } +} + void QWaylandXdgSurface::requestWindowStates(Qt::WindowStates states) { if (m_toplevel) diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h index 416feee2c..c39ccde3b 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h @@ -92,6 +92,9 @@ public: bool handlesActiveState() const { return m_toplevel; } void applyConfigure() override; bool wantsDecorations() const override; + void propagateSizeHints() override; + + void setSizeHints(); protected: void requestWindowStates(Qt::WindowStates states) override; |