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`.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/6107#note_79063