Skip to content

Refactor compositing teardown in X11Window and Unmanaged

Vlad Zahorodnii requested to merge work/zzag/surface-item-x11-damage into master

Currently, X11Window and Unmanaged call finishCompositing(), which tries to destroy the window item and other associated compositing data.

Usually, it has no any effect on the window item and the effect window because they are moved to the Deleted. However, it has some effect on the XDamage handle.

If the X11 window is unmapped, it will destroy the XDamage handle. If the X11 window is destroyed, it will do nothing. Why does it behave like that? Because that's how the XDamage spec is written.

This change removes the call to finishCompositing() and refactors how the XDamage is handled so Window::finishCompositing() is more generic.

If the X11 window is destroyed, SurfaceItemX11::forgetDamage() will be called and SurfaceItemX11::~SurfaceItemX11() won't attempt to destroy the damage handle.

If the X11 window is unmapped, SurfaceItemX11::destroyDamage() will be called and destroyDamage() in SurfaceItemX11::~SurfaceItemX11() will noop.

If compositing has been restarted, destroyDamage() in SurfaceItemX11::~SurfaceItemX11() will destroy the damage handle.

Merge request reports