Translate opaque area with frame margins

The opaque area doesn't take window decorations into account, which may
result into possible graphical artefacts.

Pick-to: 5.15 6.0 6.1
Change-Id: I1606e8256e7e204dad927931eb1221b576e227fd
Reviewed-by: David Edmundson <davidedmundson@kde.org>
This commit is contained in:
Jan Grulich 2021-02-10 17:11:27 +01:00
parent d56e534dba
commit 9227c5d18d

View File

@ -1242,12 +1242,14 @@ bool QWaylandWindow::isOpaque() const
void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea)
{
if (opaqueArea == mOpaqueArea || !mSurface)
const QRegion translatedOpaqueArea = opaqueArea.translated(frameMargins().left(), frameMargins().top());
if (translatedOpaqueArea == mOpaqueArea || !mSurface)
return;
mOpaqueArea = opaqueArea;
mOpaqueArea = translatedOpaqueArea;
struct ::wl_region *region = mDisplay->createRegion(opaqueArea);
struct ::wl_region *region = mDisplay->createRegion(translatedOpaqueArea);
mSurface->set_opaque_region(region);
wl_region_destroy(region);
}