Thanks for the proposal! I have made [a couple of additional changes](https://gitlab.winehq.org/afrantzis/wine/-/commits/wip/wayland-child-surface...) to this branch, to improve the behavior in some nested and visibility scenarios.
The locking simplification changes look very nice, and perhaps it would be good to land them independently of whatever child accel. rendering design we go with.
Concerning the child. accel design proposed, I am not sure if I find it less complex, but rather differently complex. !6107 centralizes the complexity in the `wayland_surface` update logic, but then other parts of the code can just use it without caring about most of the details. This MR has simpler parts, but then spreads out the complexity, since other parts need to care about `wayland_surface` vs `wayland_client_surface` etc. I am sure this perception about complexity is affected by my mind being used to the other design, though, and there are certainly benefits to this MR (e.g., avoiding an intermediate `wl_surface` when doing child accel. rendering).
However, note that a big part of the design and complexity of !6107 is due to wanting to provide a more general mechanism for using subsurfaces for any kind of window. This makes is very easy to support popup positioning over !6107, doing something like https://gitlab.winehq.org/afrantzis/wine/-/commit/63baaec4379fb3222a08aae01e....
This MR doesn't deal with that (which is fine), but then it's not clear to me how an approach based on this design would evolve and how complex it would become to support the popup positioning scenarios we want (and whether it would then be worth it over !6107). I think this may need a bit more exploration to get a more complete picture (or perhaps you already have a good idea of how this would look like?).