EINTERN void
e_desktop_toplevel_init(E_Desktop_Toplevel *toplevel, E_Desktop_Surface_Interface *iface, E_Surface *e_surface, struct wl_resource *shell_surface_resource)
{
+ wl_signal_init(&toplevel->events.destroy);
+
_surface_init(&toplevel->surface, e_surface, iface);
_toplevel_init(toplevel, shell_surface_resource);
return _toplevel_from_surface(surface);
}
+EINTERN void
+e_desktop_toplevel_destroy_listener_add(E_Desktop_Toplevel *toplevel, struct wl_listener *listener)
+{
+ wl_signal_add(&toplevel->events.destroy, listener);
+}
+
EINTERN void
e_desktop_toplevel_title_set(E_Desktop_Toplevel *toplevel, const char *title)
{
*/
E_Desktop_Toplevel *e_desktop_toplevel_try_from_surface(E_Surface *e_surface);
+/**
+ * Add a listener to be called when given E_Desktop_Toplevel is destroyed
+ */
+void e_desktop_toplevel_destroy_listener_add(E_Desktop_Toplevel *toplevel, struct wl_listener *listener);
+
/**
* Get E_Client instance from E_Desktop_Toplevel
*/
struct _E_Desktop_Toplevel
{
E_Desktop_Surface surface;
+
+ struct
+ {
+ struct wl_signal destroy;
+ } events;
};
struct wl_display *e_desktop_shell_display_get(E_Desktop_Shell *shell);
LOG("Destroy E_Desktop_Xdg_Toplevel_V6(%p)", toplevel);
- _toplevel_listener_finish(toplevel);
e_desktop_toplevel_finish(&toplevel->base);
+ _toplevel_listener_finish(toplevel);
free(toplevel);
}