*
* This implements a way to send and receive event for an object (which can be
* a simple C struct or less).
- *
+ *
* This is in direct concurrency with the Variable based Callback
* (see src/misc/variables.c).
*
*
* (vlc_cool_object_t doesn't need to have the VLC_COMMON_MEMBERS.)
*
- * struct vlc_cool_object_t
+ * struct vlc_cool_object_t
* {
* ...
* vlc_event_manager_t p_event_manager;
{
void * p_obj;
vlc_mutex_t object_lock;
+ vlc_mutex_t event_sending_lock;
+ vlc_object_t *p_parent_object;
DECL_ARRAY(struct vlc_event_listeners_group_t *) listeners_groups;
} vlc_event_manager_t;
/* List of event */
+/* Be sure to keep sync-ed with misc/events.c debug name table */
typedef enum vlc_event_type_t {
/* Input item events */
vlc_InputItemMetaChanged,
vlc_InputItemSubItemAdded,
+ vlc_InputItemDurationChanged,
+ vlc_InputItemPreparsedChanged,
+
+ /* Service Discovery event */
+ vlc_ServicesDiscoveryItemAdded,
+ vlc_ServicesDiscoveryItemRemoved,
+ vlc_ServicesDiscoveryStarted,
+ vlc_ServicesDiscoveryEnded
} vlc_event_type_t;
/* Event definition */
{
input_item_t * p_new_child;
} input_item_subitem_added;
+ struct vlc_input_item_duration_changed
+ {
+ mtime_t new_duration;
+ } input_item_duration_changed;
+ struct vlc_input_item_preparsed_changed
+ {
+ int new_status;
+ } input_item_preparsed_changed;
+
+ /* Service discovery events */
+ struct vlc_services_discovery_item_added
+ {
+ input_item_t * p_new_item;
+ const char * psz_category;
+ } services_discovery_item_added;
+ struct vlc_services_discovery_item_removed
+ {
+ input_item_t * p_item;
+ } services_discovery_item_removed;
+ struct vlc_services_discovery_started
+ {
+ void * unused;
+ } services_discovery_started;
+ struct vlc_services_discovery_ended
+ {
+ void * unused;
+ } services_discovery_ended;
+
} u;
} vlc_event_t;
/*
* Add a callback for an event.
*/
-VLC_EXPORT(int, vlc_event_attach, ( vlc_event_manager_t * p_event_manager,
- vlc_event_type_t event_type,
- vlc_event_callback_t pf_callback,
- void *p_user_data ));
+#define vlc_event_attach(a, b, c, d) __vlc_event_attach(a, b, c, d, #c)
+VLC_EXPORT(int, __vlc_event_attach, ( vlc_event_manager_t * p_event_manager,
+ vlc_event_type_t event_type,
+ vlc_event_callback_t pf_callback,
+ void *p_user_data,
+ const char * psz_debug_name ));
/*
* Remove a callback for an event.