diff options
Diffstat (limited to 'src/xine-engine/events.c')
-rw-r--r-- | src/xine-engine/events.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/xine-engine/events.c b/src/xine-engine/events.c index 43768c631..5db72b59c 100644 --- a/src/xine-engine/events.c +++ b/src/xine-engine/events.c @@ -29,7 +29,8 @@ #include "xine_internal.h" -int xine_register_event_listener(xine_t *this, event_listener_t listener) { +int xine_register_event_listener(xine_t *this, xine_event_listener_t listener, + void *user_data) { /* Ensure the listener is non-NULL */ if(listener == NULL) { return 0; @@ -37,23 +38,28 @@ int xine_register_event_listener(xine_t *this, event_listener_t listener) { /* Check we hava a slot free */ if(this->num_event_listeners < XINE_MAX_EVENT_LISTENERS) { - this->event_listeners[this->num_event_listeners++] = listener; + + this->event_listeners[this->num_event_listeners] = listener; + this->event_listener_user_data[this->num_event_listeners] = user_data; + + this->num_event_listeners++; + return 1; } return 0; } -void xine_send_event(xine_t *this, event_t *event, void *data) { +void xine_send_event(xine_t *this, xine_event_t *event) { uint16_t i; /* Itterate through all event handlers */ for(i=0; i < this->num_event_listeners; i++) { - (this->event_listeners[i]) (this, event, data); + (this->event_listeners[i]) (this->event_listener_user_data[i], event); } } -int xine_remove_event_listener(xine_t *this, event_listener_t listener) { +int xine_remove_event_listener(xine_t *this, xine_event_listener_t listener) { uint16_t i, found; found = 1; i = 0; @@ -69,6 +75,7 @@ int xine_remove_event_listener(xine_t *this, event_listener_t listener) { /* If possible, move the last listener to the hole thats left */ if(this->num_event_listeners > 1) { this->event_listeners[i] = this->event_listeners[this->num_event_listeners - 1]; + this->event_listener_user_data[i] = this->event_listener_user_data[this->num_event_listeners - 1]; this->event_listeners[this->num_event_listeners - 1] = NULL; } |