Skip to content

effects: Fix EffectWindow::shape() for X11 windows

Vlad Zahorodnii requested to merge work/effects-shape-x11 into master

With the introduction of scene items, the Scene::Window::bufferShape() method was removed as it makes no sense on wayland - a window may have several sub-surfaces, so a single region to indicate the shape of the window won't work.

SurfaceItem::shape() returns the shape of a surface. On Wayland, it corresponds to the rect of the wl_surface. On X11, it corresponds to the client window rect inside the frame window, or custom shape region if the client has set one.

On the other hand, EffectWindow::shape() wants a completely different thing. If the window is decorated, it needs to return the rect of the decoration. Otherwise it has to return the shape region if there's one.

In the future, the EffectWindow::shape() function must be removed as it doesn't fit the item based design. The main reason why we have it at all is because the x server doesn't support translucency, setting a shape region is a (hacky) way to work around that limitation, xeyes is a notable example.

BUG: 437138 BUG: 435862

Merge request reports