Fix computation of effective opaque region of SurfaceItemX11

The value of _NET_WM_OPAQUE_REGION can be out of sync with the geometry
of the window. The NETWM spec suggests to compute the effective opaque
region by taking intersection of _NET_WM_OPAQUE_REGION and the bounding
region set by the shape extension.

SurfaceItemX11::opaque() got broken after refactoring opaque region
handling in wayland surfaces so SurfaceInterface::opaque() always
returns a sane value, the computation of effective opaque region is done
in SurfaceInterface at commit time.

BUG: 455617
This commit is contained in:
Vlad Zahorodnii 2022-06-20 11:57:19 +03:00
parent c1a536a527
commit 35a3184ea3

View file

@ -139,7 +139,11 @@ QRegion SurfaceItemX11::shape() const
QRegion SurfaceItemX11::opaque() const QRegion SurfaceItemX11::opaque() const
{ {
return window()->opaqueRegion(); if (!window()->hasAlpha()) {
return shape();
} else {
return window()->opaqueRegion() & shape();
}
} }
SurfacePixmap *SurfaceItemX11::createPixmap() SurfacePixmap *SurfaceItemX11::createPixmap()