};
static void _e_comp_wl_video_object_setup(E_Video_Object *vo, E_Client *ec);
+static void _e_comp_wl_video_object_destroy(E_Video_Object *vo);
static int
_e_comp_wl_video_object_prop_id_get(E_Video_Object *vo, const char *name)
ec = ev->ec;
vo = data;
if (vo->ec != ec) return ECORE_CALLBACK_PASS_ON;
+ if (!ec->comp_data) return ECORE_CALLBACK_PASS_ON;
- E_FREE_FUNC(vo->client_event_handler.visibility_change, ecore_event_handler_del);
- E_FREE_FUNC(vo->client_event_handler.remove, ecore_event_handler_del);
-
- e_client_video_unset(vo->ec);
-
- vo->ec = NULL;
+ _e_comp_wl_video_object_destroy(vo);
return ECORE_CALLBACK_PASS_ON;
}
}
static void
-_e_comp_wl_video_object_resource_destroy(struct wl_resource *resource)
+_e_comp_wl_video_object_destroy(E_Video_Object *vo)
{
- E_Video_Object *vo = wl_resource_get_user_data(resource);
- EINA_SAFETY_ON_NULL_RETURN(vo);
+ if (!vo)
+ return;
- if (vo->ec)
- {
- E_FREE_FUNC(vo->client_event_handler.visibility_change, ecore_event_handler_del);
- E_FREE_FUNC(vo->client_event_handler.remove, ecore_event_handler_del);
+ VIN("destroy", vo->ec);
- e_client_video_unset(vo->ec);
- }
+ wl_resource_set_destructor(vo->resource, NULL);
+
+ E_FREE_FUNC(vo->client_event_handler.visibility_change, ecore_event_handler_del);
+ E_FREE_FUNC(vo->client_event_handler.remove, ecore_event_handler_del);
+
+ e_client_video_unset(vo->ec);
free(vo);
}
+static void
+_e_comp_wl_video_object_resource_destroy(struct wl_resource *resource)
+{
+ E_Video_Object *vo = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(vo);
+
+ _e_comp_wl_video_object_destroy(vo);
+}
+
static void
_e_comp_wl_video_object_handle_destroy(struct wl_client *client, struct wl_resource *resource)
{
int id;
vo = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(vo);
if (!vo->ec)
return;
E_Video_Object *vo;
vo = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(vo);
if(!vo->ec)
return;
E_Video_Object *vo;
vo = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(vo);
if(!vo->ec)
return;
E_Video_Object *vo;
vo = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(vo);
if(!vo->ec)
return;
E_Video_Object *vo;
vo = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(vo);
if(!vo->ec)
return;