Etaash Mathamsetty (@etaash.mathamsetty) commented about dlls/winewayland.drv/wayland_surface.c:
- TRACE("surface=%p owner=%p\n", surface, owner); + OffsetRect(&rect, -owner->window.rect.left, -owner->window.rect.top); + rect = map_rect_to_surface(surface, rect);
- surface->wl_subsurface = - wl_subcompositor_get_subsurface(process_wayland.wl_subcompositor, - surface->wl_surface, - owner->wl_surface); - if (!surface->wl_subsurface) + if (surface->xdg_surface && surface->xdg_popup && surface->owner_hwnd == owner->hwnd) { - ERR("Failed to create client wl_subsurface\n"); - goto err; + if (surface->current.rect.left == rect.left && surface->current.rect.top == rect.top) return; +
to avoid any feedback loop from NtUserSetRawWindowPos I think we should check for if a config is being processed. `if (surface->processing.serial && !surface->processing.processed) return;` -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11248#note_144191