E_Surface *surface;
E_Client *ec;
- E_Client_Hook *client_del_hook;
-
+ struct wl_listener ec_destroy;
struct wl_listener viewport_commit;
struct wl_listener surface_commit;
};
_surface_view_surface_unlink(view);
e_surface_destroy(view->surface);
- e_client_hook_del(view->client_del_hook);
+ wl_list_remove(&view->ec_destroy.link);
free(view);
}
}
static void
-_surface_view_cb_client_del(void *data, E_Client *ec)
+_surface_view_cb_ec_destroy(struct wl_listener *listener, void *data)
{
- E_Surface_View *view = data;
-
- if (view->ec != ec)
- return;
+ E_Surface_View *view = wl_container_of(listener, view, ec_destroy);
TRACE_DS_BEGIN(SURFACE_VIEW:CLIENT DEL CB);
_surface_view_destroy(view);
e_surface_ec_set(view->surface, ec);
view->ec = ec;
- view->client_del_hook = e_client_hook_add(E_CLIENT_HOOK_DEL, _surface_view_cb_client_del, view);
+
+ view->ec_destroy.notify = _surface_view_cb_ec_destroy;
+ e_client_destroy_listener_add(ec, &view->ec_destroy);
ec->argb = EINA_FALSE;
ec->redirected = ec->ignored = 1;