xdg-popup: Handle inert seats

According to the protocol text, the popup will be immediately dismissed
when the grab is rejected. Because the grab can't be executed with a
destroyed seat, the popup is dismissed when one is provided.
This commit is contained in:
Väinö Mäkelä 2023-06-01 14:10:09 +03:00 committed by Simon Ser
parent 0601813ab6
commit 07e27ba854

View file

@ -274,6 +274,10 @@ static void xdg_popup_handle_grab(struct wl_client *client,
struct wlr_seat_client *seat_client = struct wlr_seat_client *seat_client =
wlr_seat_client_from_resource(seat_resource); wlr_seat_client_from_resource(seat_resource);
if (seat_client == NULL) {
wlr_surface_destroy_role_object(popup->base->surface);
return;
}
if (popup->sent_initial_configure) { if (popup->sent_initial_configure) {
wl_resource_post_error(popup->resource, wl_resource_post_error(popup->resource,
XDG_POPUP_ERROR_INVALID_GRAB, XDG_POPUP_ERROR_INVALID_GRAB,