Move frames rendering and event handling to a separate client, this has 3 advantages:
- It helps substantially in moving the core away from a GTK3 dependency.
- It brings some hope in making frames a MetaWindowX11 detail, and make Mutter see MetaWindow as "CSD" surfaces all over the place.
- It allows these frames to be rendered with something else than GTK3, the frames client uses GTK4 and real GtkWidgets for it.
Mutter is still the WM, and is in charge of reparenting client windows into these frame windows, the frame windows are however created by this other X11 client. This involves some additional custom messaging between Mutter and this frames client, and some shuffled messaging between Mutter, the frames client and application windows to make these frames act as toplevels.
This is still a bit rough though, most notably it misses frame/content resizing synchronization. I was able to shake a fair amount of glitches recently, so it started to make sense making a draft and see if the approach is worth exploring further. Perhaps @fmuellner/@ofourdan can assess, or commit me into an asylum :p, this is likely not a place where a reparenting WM was cut through before.