Alexandros Frantzis (@afrantzis) commented about dlls/winewayland.drv/wayland_surface.c:
- int local_x, local_y, x, y;
- if (surface->processing.serial && surface->processing.processed &&
(toplevel_data = wayland_win_data_get_nolock(surface->toplevel_hwnd)) &&
(toplevel_surface = toplevel_data->wayland_surface))
- {
local_x = surface->window.rect.left - toplevel_surface->window.rect.left;
local_y = surface->window.rect.top - toplevel_surface->window.rect.top;
wayland_surface_coords_from_window(surface, local_x, local_y, &x, &y);
TRACE("hwnd=%p pos=%d,%d\n", surface->hwnd, x, y);
wl_subsurface_set_position(surface->wl_subsurface, x, y);
if (toplevel_data->client_surface)
wl_subsurface_place_above(surface->wl_subsurface, toplevel_data->client_surface->wl_surface);
Ideally we should do the same for (child) `client_surface`s themselves, since they could also be obscured by their toplevel parent's `client_surface`.