Etaash Mathamsetty (@etaash.mathamsetty) commented about dlls/winewayland.drv/wayland_surface.c:
+ + /* this is a stale event */ + if (!wayland_surface_is_popup(surface)) goto done; + if (surface->xdg_popup != xdg_popup) goto done; + + /* the protocol requires us to destroy the xdg_popup */ + wayland_surface_clear_role(surface); + + if (!(owner_data = wayland_win_data_get_nolock(surface->owner_hwnd)) || + !(owner_surface = owner_data->wayland_surface) || !owner_surface->xdg_surface) + { + ERR("Failed to recreate popup!\n"); + goto done; + } + + wayland_surface_make_popup(surface, owner_surface); Another question: Should we handle there being a potential feedback loop here? Where we keep getting handle_done because of making a popup in here. Should I try using a solution similar to what is used in xdg-toplevel where we use the win32u message loop to handle this?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/11178#note_143447