From 07e27ba8549044d2462f3e659c3e77d2e4716fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A4in=C3=B6=20M=C3=A4kel=C3=A4?= Date: Thu, 1 Jun 2023 14:10:09 +0300 Subject: [PATCH] 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. --- types/xdg_shell/wlr_xdg_popup.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/types/xdg_shell/wlr_xdg_popup.c b/types/xdg_shell/wlr_xdg_popup.c index f3e64110..c5fdef8e 100644 --- a/types/xdg_shell/wlr_xdg_popup.c +++ b/types/xdg_shell/wlr_xdg_popup.c @@ -274,6 +274,10 @@ static void xdg_popup_handle_grab(struct wl_client *client, struct wlr_seat_client *seat_client = 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) { wl_resource_post_error(popup->resource, XDG_POPUP_ERROR_INVALID_GRAB,