static void
_toplevel_destroy(E_Desktop_Toplevel *toplevel)
{
- e_shell_e_client_destroy(e_surface_ec_get(toplevel->surface.surface));
_surface_finish(&toplevel->surface);
free(toplevel);
}
{
E_Desktop_Surface *surface = wl_container_of(listener, surface, surface_destroy);
- _toplevel_destroy(_toplevel_from_surface(surface));
+ _surface_finish(surface);
}
static void
static void
_surface_finish(E_Desktop_Surface *surface)
{
+ if (!surface->surface)
+ return;
+
+ e_shell_e_client_destroy(e_surface_ec_get(surface->surface));
wl_list_remove(&surface->surface_destroy.link);
surface->iface = NULL;
surface->surface = NULL;
return _toplevel_from_surface(surface);
}
+EINTERN void
+e_desktop_toplevel_destroy(E_Desktop_Toplevel *toplevel)
+{
+ _toplevel_destroy(toplevel);
+}
+
EINTERN void
e_desktop_toplevel_title_set(E_Desktop_Toplevel *toplevel, const char *title)
{
E_Desktop_Toplevel *e_desktop_shell_toplevel_create(E_Desktop_Shell *shell, E_Surface *e_surface, E_Desktop_Surface_Interface *iface, struct wl_resource *shell_surface_resource);
+void e_desktop_toplevel_destroy(E_Desktop_Toplevel *toplevel);
void e_desktop_toplevel_title_set(E_Desktop_Toplevel *toplevel, const char *title);
void e_desktop_toplevel_app_id_set(E_Desktop_Toplevel *toplevel, const char *app_id);
void e_desktop_toplevel_parent_set(E_Desktop_Toplevel *toplevel, E_Desktop_Toplevel *parent);