From a02c408afc1ec3713d26f133277cbba2d207f102 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Tue, 23 Feb 2021 08:42:16 +0100 Subject: [PATCH] Client: get correct window content geometry Window content geometry should not include invisible portions of the decorations, like shadows. This is stated in xdg-shell specificification and in the description for this method. Change-Id: I444fe9e28f0f175d2051be5c704efa7658bd45fb Reviewed-by: David Edmundson --- src/plugins/platforms/wayland/qwaylandwindow.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 9b9d30a6fde..0f1752d6db6 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -369,7 +369,7 @@ void QWaylandWindow::setGeometry(const QRect &rect) sendExposeEvent(exposeGeometry); if (mShellSurface && isExposed()) - mShellSurface->setWindowGeometry(windowContentGeometry()); + mShellSurface->setWindowGeometry(QRect(QPoint(), surfaceSize())); if (isOpaque() && mMask.isEmpty()) setOpaqueArea(rect); @@ -697,7 +697,12 @@ QSize QWaylandWindow::surfaceSize() const */ QRect QWaylandWindow::windowContentGeometry() const { - return QRect(QPoint(), surfaceSize()); + QMargins shadowMargins; + + if (mWindowDecoration) + shadowMargins = mWindowDecoration->margins(QWaylandAbstractDecoration::ShadowsOnly); + + return QRect(QPoint(shadowMargins.left(), shadowMargins.right()), surfaceSize().shrunkBy(shadowMargins)); } /*!