Rémi Bernon (@rbernon) commented about dlls/winewayland.drv/window.c:
- if (!(flags & UWS_NO_UPDATE_CHILDREN))
- {
/* Update child window surfaces, but do not allow recursive updates. */
UINT wwd_flags = UWS_NO_UPDATE_CHILDREN;
/* wayland_win_data_update_wayland_surface doesn't detect a surface
* change without a window change, so force a role update. */
if (surface_changed) wwd_flags |= UWS_FORCE_ROLE_UPDATE;
RB_FOR_EACH_ENTRY(wwd, &win_data_rb, struct wayland_win_data, entry)
{
if (wwd->wayland_surface && NtUserIsChild(data->hwnd, wwd->hwnd))
{
wayland_win_data_update_wayland_surface(wwd, wwd_flags);
if (wwd->wayland_surface) wayland_win_data_update_wayland_state(wwd);
}
}
- }
I don't like this duplication of the window tree management much, and I think it would be better to keep win32u in charge. It could go through adding notifications calls like SetParent, or simply recursively calling `update_window_state` for the child windows which should call the drivers `WindowPosChanging/Changed`.