diff options
author | Pier Luigi Fiorini <pierluigi.fiorini@liri.io> | 2019-01-06 19:21:20 +0100 |
---|---|---|
committer | Pier Luigi Fiorini <pierluigi.fiorini@liri.io> | 2019-01-15 08:12:07 +0000 |
commit | 5698f22afbd0e6be273f31cf8b934383e7b68cdb (patch) | |
tree | a5f5e162c6980e0f0954b2e58ff0933a35c03881 /src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | |
parent | 312c74a4aa7124b5125c2ca6165805c50e23e828 (diff) |
Set size hints for xdg-shell and xdg-shell-v6
Send minimum and maximum size hints to compositors.
[ChangeLog][QPA plugin] Implement minimum and maximum size in
the xdg-shell and xdg-shell-v6 shell integrations.
Change-Id: I631c3348c8333d7a246b21228a92c436f5adb5dc
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
Diffstat (limited to 'src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp')
-rw-r--r-- | src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | 30 |
1 files changed, 30 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) |