Try unparenting client windows when fullscreen again

Open Jonas Ådahl requested to merge jadahl/mutter:wip/double-x11-parent into main

This takes inspiration from FVWM and implements double parenting of decorated windows, although perhaps for different reasons.

When decorated, we'll now have

graph TD;
  Root_window-->Frame_window;
  Frame_window-->Wrapper_window;
  Wrapper_window-->Client_window;

when a window is floating, but

graph TD;
  Root_window-->Wrapper_window;
  Wrapper_window-->Client_window;

when a decorated window is fullscreen.

The point of the wrapper window sitting between the frame and the client window is to avoid bugs like #2678 (closed) when we try to avoid extra blits in the X server for fullscreen windows.

This is a less fragile attempt to do what !2910 (closed) also tries, which is to avoid triggering the mentioned "unfixable" client bugs.

Merge request reports