[kstyle] Ensure that shadows are destroyed after decorated windows

Authored by zzag on May 21 2020, 1:54 PM.

Description

[kstyle] Ensure that shadows are destroyed after decorated windows

The order in which the underlying window and the shadow are destroyed is
undefined. In most cases, the shadow is destroyed after the window, but
in rare cases it may be vice versa, for example it's the case with popup
menus in Dolphin. If the shadow is destroyed before the window, then
the window will be shadowless when the compositor animates it.

The only way to guarantee that the shadow is destroyed after the window
is to create a parent-child relationship between two.

Given that the widget and the window have different lifetimes, we have
to be extra careful with keeping dangling pointers out of _shadows.