diff --git a/include/wlr/types/wlr_xdg_shell.h b/include/wlr/types/wlr_xdg_shell.h index 1bca9ef3..14100fda 100644 --- a/include/wlr/types/wlr_xdg_shell.h +++ b/include/wlr/types/wlr_xdg_shell.h @@ -296,9 +296,14 @@ uint32_t wlr_xdg_toplevel_set_tiled(struct wlr_xdg_surface *surface, uint32_t tiled_edges); /** - * Request that this xdg surface closes. + * Request that this xdg toplevel closes. */ -void wlr_xdg_surface_send_close(struct wlr_xdg_surface *surface); +void wlr_xdg_toplevel_send_close(struct wlr_xdg_surface *surface); + +/** + * Request that this xdg popup closes. + **/ +void wlr_xdg_popup_destroy(struct wlr_xdg_surface *surface); /** * Get the geometry for this positioner based on the anchor rect, gravity, and diff --git a/rootston/xdg_shell.c b/rootston/xdg_shell.c index da8909ba..918f90ab 100644 --- a/rootston/xdg_shell.c +++ b/rootston/xdg_shell.c @@ -248,9 +248,9 @@ static void close(struct roots_view *view) { struct wlr_xdg_surface *surface = view->xdg_surface; struct wlr_xdg_popup *popup = NULL; wl_list_for_each(popup, &surface->popups, link) { - wlr_xdg_surface_send_close(popup->base); + wlr_xdg_popup_destroy(popup->base); } - wlr_xdg_surface_send_close(surface); + wlr_xdg_toplevel_send_close(surface); } static void destroy(struct roots_view *view) { diff --git a/types/xdg_shell/wlr_xdg_surface.c b/types/xdg_shell/wlr_xdg_surface.c index 17edbe47..5e353ba7 100644 --- a/types/xdg_shell/wlr_xdg_surface.c +++ b/types/xdg_shell/wlr_xdg_surface.c @@ -517,21 +517,17 @@ void wlr_xdg_surface_ping(struct wlr_xdg_surface *surface) { surface->client->ping_serial); } -void wlr_xdg_surface_send_close(struct wlr_xdg_surface *surface) { - switch (surface->role) { - case WLR_XDG_SURFACE_ROLE_NONE: - assert(0 && "not reached"); - break; - case WLR_XDG_SURFACE_ROLE_TOPLEVEL: - if (surface->toplevel) { - xdg_toplevel_send_close(surface->toplevel->resource); - } - break; - case WLR_XDG_SURFACE_ROLE_POPUP: - if (surface->popup) { - xdg_popup_send_popup_done(surface->popup->resource); - } - break; +void wlr_xdg_toplevel_send_close(struct wlr_xdg_surface *surface) { + if (surface->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL + && surface->toplevel) { + xdg_toplevel_send_close(surface->toplevel->resource); + } +} + +void wlr_xdg_popup_destroy(struct wlr_xdg_surface *surface) { + if (surface->role == WLR_XDG_SURFACE_ROLE_POPUP + && surface->popup) { + xdg_popup_send_popup_done(surface->popup->resource); } }