Fix destruction of popups without grabs

Fixes #846
This commit is contained in:
Drew DeVault 2018-04-07 12:21:21 -04:00
parent f4125220a5
commit bf68854a38
2 changed files with 2 additions and 12 deletions

View file

@ -589,13 +589,8 @@ static void xdg_popup_handle_destroy(struct wl_client *client,
struct wl_resource *resource) { struct wl_resource *resource) {
struct wlr_xdg_surface *surface = struct wlr_xdg_surface *surface =
xdg_surface_from_xdg_popup_resource(resource); xdg_surface_from_xdg_popup_resource(resource);
struct wlr_xdg_popup_grab *grab =
xdg_shell_popup_grab_from_seat(surface->client->shell,
surface->popup->seat);
struct wlr_xdg_surface *topmost =
xdg_popup_grab_get_topmost(grab);
if (topmost != surface) { if (!wl_list_empty(&surface->popups)) {
wl_resource_post_error(surface->client->resource, wl_resource_post_error(surface->client->resource,
XDG_WM_BASE_ERROR_NOT_THE_TOPMOST_POPUP, XDG_WM_BASE_ERROR_NOT_THE_TOPMOST_POPUP,
"xdg_popup was destroyed while it was not the topmost popup"); "xdg_popup was destroyed while it was not the topmost popup");

View file

@ -545,13 +545,8 @@ static void xdg_popup_handle_destroy(struct wl_client *client,
struct wl_resource *resource) { struct wl_resource *resource) {
struct wlr_xdg_surface_v6 *surface = struct wlr_xdg_surface_v6 *surface =
xdg_surface_from_xdg_popup_resource(resource); xdg_surface_from_xdg_popup_resource(resource);
struct wlr_xdg_popup_grab_v6 *grab =
xdg_shell_popup_grab_from_seat(surface->client->shell,
surface->popup->seat);
struct wlr_xdg_surface_v6 *topmost =
xdg_popup_grab_get_topmost(grab);
if (topmost != surface) { if (!wl_list_empty(&surface->popups)) {
wl_resource_post_error(surface->client->resource, wl_resource_post_error(surface->client->resource,
ZXDG_SHELL_V6_ERROR_NOT_THE_TOPMOST_POPUP, ZXDG_SHELL_V6_ERROR_NOT_THE_TOPMOST_POPUP,
"xdg_popup was destroyed while it was not the topmost popup"); "xdg_popup was destroyed while it was not the topmost popup");