E_FREE_FUNC(ec->ping_poller, ecore_poller_del);
/* must be called before parent/child clear */
_e_client_hook_call(E_CLIENT_HOOK_DEL, ec);
- E_FREE(ec->comp_data);
+ e_client_cdata_free(ec);
if ((!ec->new_client) && (!stopping))
{
_e_client_surface_tree_foreach_helper(ec, func, data);
}
-EINTERN E_Comp_Wl_Client_Data *e_client_cdata_get(E_Client *ec)
+EINTERN E_Comp_Wl_Client_Data *
+e_client_cdata_new(E_Client *ec)
+{
+ E_Comp_Wl_Client_Data *cdata;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL);
+
+ if (!(cdata = E_NEW(E_Comp_Wl_Client_Data, 1)))
+ {
+ ERR("Could not allocate new E_Comp_Wl_Client_Data structure");
+ return NULL;
+ }
+ ec->comp_data = cdata;
+
+ return cdata;
+}
+
+EINTERN void
+e_client_cdata_free(E_Client *ec)
+{
+ EINA_SAFETY_ON_NULL_RETURN(ec);
+ if (!ec->comp_data) return;
+
+ E_FREE(ec->comp_data);
+}
+
+EINTERN E_Comp_Wl_Client_Data *
+e_client_cdata_get(E_Client *ec)
{
if (!ec) return NULL;
return ec->comp_data;
-}
+}
\ No newline at end of file
EINTERN void e_client_surface_tree_foreach(E_Client *ec, E_Client_Surface_Tree_Foreach func, void *data);
// get a comp_data from a ec
+EINTERN E_Comp_Wl_Client_Data *e_client_cdata_new(E_Client *ec);
+EINTERN void e_client_cdata_free(E_Client *ec);
EINTERN E_Comp_Wl_Client_Data *e_client_cdata_get(E_Client *ec);
/**
return;
}
- if (!(cdata = E_NEW(E_Comp_Wl_Client_Data, 1)))
+ if (!(cdata = e_client_cdata_new(ec)))
{
ERR("Could not allocate new client data structure");
TRACE_DS_END();
return;
}
- ec->comp_data = cdata;
wl_signal_init(&cdata->destroy_signal);
wl_signal_init(&cdata->apply_viewport_signal);
E_FREE_FUNC(cdata->on_focus_timer, ecore_timer_del);
- E_FREE(cdata);
+ e_client_cdata_free(ec);
_e_comp_wl_focus_check();