From c7e775aef78b655666916bba15196c89dbf0b43d Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Wed, 15 Aug 2018 16:49:54 +0200 Subject: Compositor xdg-shell: Respect min and max size [ChangeLog][Compositor] xdg-shell minimum and maximum sizes are now respected when resizing. Change-Id: Iaf6a2bd283117e948fda6693530e08f68f755a17 Reviewed-by: Paul Olav Tvete --- src/compositor/extensions/qwaylandxdgshell.cpp | 11 ++++++++--- src/compositor/extensions/qwaylandxdgshell_p.h | 2 +- src/compositor/extensions/qwaylandxdgshellv6.cpp | 11 ++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/compositor/extensions/qwaylandxdgshell.cpp b/src/compositor/extensions/qwaylandxdgshell.cpp index 205269a88..175caea62 100644 --- a/src/compositor/extensions/qwaylandxdgshell.cpp +++ b/src/compositor/extensions/qwaylandxdgshell.cpp @@ -935,9 +935,14 @@ QSize QWaylandXdgToplevel::sizeForResize(const QSizeF &size, const QPointF &delt else if (edges & Qt::BottomEdge) height += delta.y(); - //TODO: use minSize given by the client here instead - QSizeF newSize(qMax(width, 1.0), qMax(height, 1.0)); - return newSize.toSize(); + QSize newSize = QSize(width, height) + .expandedTo(minSize()) + .expandedTo({1, 1}); // We don't want to send a size of (0,0) as that means that the client decides + + if (maxSize().isValid()) + newSize = newSize.boundedTo(maxSize()); + + return newSize; } /*! diff --git a/src/compositor/extensions/qwaylandxdgshell_p.h b/src/compositor/extensions/qwaylandxdgshell_p.h index 70def5f7a..e87bb17f0 100644 --- a/src/compositor/extensions/qwaylandxdgshell_p.h +++ b/src/compositor/extensions/qwaylandxdgshell_p.h @@ -177,7 +177,7 @@ public: QString m_title; QString m_appId; QSize m_maxSize; - QSize m_minSize; + QSize m_minSize = {0, 0}; QScopedPointer m_decoration; static QWaylandSurfaceRole s_role; diff --git a/src/compositor/extensions/qwaylandxdgshellv6.cpp b/src/compositor/extensions/qwaylandxdgshellv6.cpp index 0772846fd..d447ac3c8 100644 --- a/src/compositor/extensions/qwaylandxdgshellv6.cpp +++ b/src/compositor/extensions/qwaylandxdgshellv6.cpp @@ -934,9 +934,14 @@ QSize QWaylandXdgToplevelV6::sizeForResize(const QSizeF &size, const QPointF &de else if (edges & Qt::BottomEdge) height += delta.y(); - //TODO: use minSize given by the client here instead - QSizeF newSize(qMax(width, 1.0), qMax(height, 1.0)); - return newSize.toSize(); + QSize newSize = QSize(width, height) + .expandedTo(minSize()) + .expandedTo({1, 1}); // We don't want to send a size of (0,0) as that means that the client decides + + if (maxSize().isValid()) + newSize = newSize.boundedTo(maxSize()); + + return newSize; } /*! -- cgit v1.2.3