Etaash Mathamsetty (@etaash.mathamsetty) commented about dlls/winewayland.drv/wayland_surface.c:
+static void xdg_popup_handle_configure(void *private, struct xdg_popup *xdg_popup, + int32_t x, int32_t y, int32_t width, int32_t height) +{ + HWND hwnd = private; + struct wayland_win_data *data, *owner_data; + struct wayland_surface *surface, *owner; + RECT rect = { x, y, x + width, y + height }; + + TRACE("hwnd=%p rect=%s\n", hwnd, wine_dbgstr_rect(&rect)); + + if (!(data = wayland_win_data_get(hwnd))) return; + + if ((surface = data->wayland_surface) && wayland_surface_is_popup(surface)) + { + surface->pending.rect = map_rect_from_surface(surface, rect);
fractional scale events are not guaranteed to be sent with configure events, so you could have a case where surface-\>pending.rect is converted using a stale scale and then the incorrect rect is used in wayland_configure_window. Also, there could be another scale event between PostMessage and wayland_configure_window. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11248#note_144289