Revert "scene: Ignore xwayland window shape"

This reverts commit 4bc74d6831.

Wine still depends on XSHAPE to implement window clipping APIs in
Windows applications.

BUG: 493934


(cherry picked from commit a12d0723a9)

Co-authored-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
wilder/Plasma/6.2
Vlad Zahorodnii 1 year ago
parent 992a3fc80f
commit 89ef2bfb47
  1. 19
      src/scene/surfaceitem_wayland.cpp
  2. 1
      src/scene/surfaceitem_wayland.h

@ -252,15 +252,30 @@ SurfaceItemXwayland::SurfaceItemXwayland(X11Window *window, Item *parent)
: SurfaceItemWayland(window->surface(), parent)
, m_window(window)
{
connect(window, &X11Window::shapeChanged, this, &SurfaceItemXwayland::discardQuads);
}
QList<QRectF> SurfaceItemXwayland::shape() const
{
QList<QRectF> shape = m_window->shapeRegion();
for (QRectF &shapePart : shape) {
shapePart = shapePart.intersected(rect());
}
return shape;
}
QRegion SurfaceItemXwayland::opaque() const
{
QRegion shapeRegion;
for (const QRectF &shapePart : shape()) {
shapeRegion += shapePart.toRect();
}
if (!m_window->hasAlpha()) {
return rect().toRect();
return shapeRegion;
} else {
return m_window->opaqueRegion() & rect().toRect();
return m_window->opaqueRegion() & shapeRegion;
}
return QRegion();
}
#endif
} // namespace KWin

@ -95,6 +95,7 @@ public:
explicit SurfaceItemXwayland(X11Window *window, Item *parent = nullptr);
QRegion opaque() const override;
QList<QRectF> shape() const override;
private:
X11Window *m_window;

Loading…
Cancel
Save