| 69 | | p_em = malloc(sizeof( libvlc_event_manager_t )); |
|---|
| 70 | | if( !p_em ) |
|---|
| 71 | | { |
|---|
| 72 | | libvlc_exception_raise( p_e, "No Memory left" ); |
|---|
| 73 | | return NULL; |
|---|
| 74 | | } |
|---|
| 75 | | |
|---|
| 76 | | p_em->p_obj = p_obj; |
|---|
| 77 | | p_em->p_libvlc_instance = p_libvlc_inst; |
|---|
| 78 | | ARRAY_INIT( p_em->listeners_groups ); |
|---|
| 79 | | |
|---|
| 80 | | return p_em; |
|---|
| | 69 | p_em = malloc(sizeof( libvlc_event_manager_t )); |
|---|
| | 70 | if( !p_em ) |
|---|
| | 71 | { |
|---|
| | 72 | libvlc_exception_raise( p_e, "No Memory left" ); |
|---|
| | 73 | return NULL; |
|---|
| | 74 | } |
|---|
| | 75 | |
|---|
| | 76 | p_em->p_obj = p_obj; |
|---|
| | 77 | p_em->p_libvlc_instance = p_libvlc_inst; |
|---|
| | 78 | ARRAY_INIT( p_em->listeners_groups ); |
|---|
| | 79 | |
|---|
| | 80 | return p_em; |
|---|
| 90 | | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 91 | | libvlc_event_listener_t * listener; |
|---|
| 92 | | |
|---|
| 93 | | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| 94 | | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| 95 | | free( listener ); |
|---|
| 96 | | FOREACH_END() |
|---|
| 97 | | free( listeners_group ); |
|---|
| 98 | | FOREACH_END() |
|---|
| 99 | | free( p_em ); |
|---|
| | 90 | libvlc_event_listeners_group_t * listeners_group; |
|---|
| | 91 | libvlc_event_listener_t * listener; |
|---|
| | 92 | |
|---|
| | 93 | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| | 94 | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| | 95 | free( listener ); |
|---|
| | 96 | FOREACH_END() |
|---|
| | 97 | free( listeners_group ); |
|---|
| | 98 | FOREACH_END() |
|---|
| | 99 | free( p_em ); |
|---|
| 108 | | libvlc_event_manager_t * p_em, |
|---|
| 109 | | libvlc_event_type_t event_type, |
|---|
| 110 | | libvlc_exception_t * p_e ) |
|---|
| 111 | | { |
|---|
| 112 | | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 113 | | listeners_group = malloc(sizeof(libvlc_event_listeners_group_t)); |
|---|
| 114 | | if( !listeners_group ) |
|---|
| 115 | | { |
|---|
| 116 | | libvlc_exception_raise( p_e, "No Memory left" ); |
|---|
| 117 | | return; |
|---|
| 118 | | } |
|---|
| 119 | | |
|---|
| 120 | | listeners_group->event_type = event_type; |
|---|
| 121 | | ARRAY_INIT( listeners_group->listeners ); |
|---|
| 122 | | |
|---|
| 123 | | ARRAY_APPEND( p_em->listeners_groups, listeners_group ); |
|---|
| | 108 | libvlc_event_manager_t * p_em, |
|---|
| | 109 | libvlc_event_type_t event_type, |
|---|
| | 110 | libvlc_exception_t * p_e ) |
|---|
| | 111 | { |
|---|
| | 112 | libvlc_event_listeners_group_t * listeners_group; |
|---|
| | 113 | listeners_group = malloc(sizeof(libvlc_event_listeners_group_t)); |
|---|
| | 114 | if( !listeners_group ) |
|---|
| | 115 | { |
|---|
| | 116 | libvlc_exception_raise( p_e, "No Memory left" ); |
|---|
| | 117 | return; |
|---|
| | 118 | } |
|---|
| | 119 | |
|---|
| | 120 | listeners_group->event_type = event_type; |
|---|
| | 121 | ARRAY_INIT( listeners_group->listeners ); |
|---|
| | 122 | |
|---|
| | 123 | ARRAY_APPEND( p_em->listeners_groups, listeners_group ); |
|---|
| 134 | | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 135 | | libvlc_event_listener_t * listener; |
|---|
| 136 | | /* Fill event with the sending object now */ |
|---|
| 137 | | p_event->p_obj = p_em->p_obj; |
|---|
| 138 | | |
|---|
| 139 | | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| 140 | | if( listeners_group->event_type == p_event->type ) |
|---|
| 141 | | { |
|---|
| 142 | | /* We found the group, now send every one the event */ |
|---|
| 143 | | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| 144 | | listener->pf_callback( p_event ); |
|---|
| 145 | | FOREACH_END() |
|---|
| 146 | | break; |
|---|
| 147 | | } |
|---|
| 148 | | FOREACH_END() |
|---|
| | 134 | libvlc_event_listeners_group_t * listeners_group; |
|---|
| | 135 | libvlc_event_listener_t * listener; |
|---|
| | 136 | /* Fill event with the sending object now */ |
|---|
| | 137 | p_event->p_obj = p_em->p_obj; |
|---|
| | 138 | |
|---|
| | 139 | FOREACH_ARRAY( listeners_group, p_em->listeners_groups ) |
|---|
| | 140 | if( listeners_group->event_type == p_event->type ) |
|---|
| | 141 | { |
|---|
| | 142 | /* We found the group, now send every one the event */ |
|---|
| | 143 | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| | 144 | listener->pf_callback( p_event ); |
|---|
| | 145 | FOREACH_END() |
|---|
| | 146 | break; |
|---|
| | 147 | } |
|---|
| | 148 | FOREACH_END() |
|---|
| 166 | | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 167 | | libvlc_event_listener_t * listener; |
|---|
| 168 | | listener = malloc(sizeof(libvlc_event_listener_t)); |
|---|
| 169 | | if( !listener ) |
|---|
| 170 | | { |
|---|
| 171 | | libvlc_exception_raise( p_e, "No Memory left" ); |
|---|
| 172 | | return; |
|---|
| 173 | | } |
|---|
| 174 | | |
|---|
| 175 | | listener->event_type = event_type; |
|---|
| 176 | | listener->p_user_data = p_user_data; |
|---|
| 177 | | listener->pf_callback = pf_callback; |
|---|
| 178 | | |
|---|
| 179 | | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| 180 | | if( listeners_group->event_type == listener->event_type ) |
|---|
| 181 | | { |
|---|
| 182 | | ARRAY_APPEND( listeners_group->listeners, listener ); |
|---|
| 183 | | return; |
|---|
| 184 | | } |
|---|
| 185 | | FOREACH_END() |
|---|
| 186 | | |
|---|
| 187 | | free(listener); |
|---|
| 188 | | libvlc_exception_raise( p_e, |
|---|
| 189 | | "This object event manager doesn't know about '%s' events", |
|---|
| 190 | | libvlc_event_type_name(a)); |
|---|
| | 166 | libvlc_event_listeners_group_t * listeners_group; |
|---|
| | 167 | libvlc_event_listener_t * listener; |
|---|
| | 168 | listener = malloc(sizeof(libvlc_event_listener_t)); |
|---|
| | 169 | if( !listener ) |
|---|
| | 170 | { |
|---|
| | 171 | libvlc_exception_raise( p_e, "No Memory left" ); |
|---|
| | 172 | return; |
|---|
| | 173 | } |
|---|
| | 174 | |
|---|
| | 175 | listener->event_type = event_type; |
|---|
| | 176 | listener->p_user_data = p_user_data; |
|---|
| | 177 | listener->pf_callback = pf_callback; |
|---|
| | 178 | |
|---|
| | 179 | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| | 180 | if( listeners_group->event_type == listener->event_type ) |
|---|
| | 181 | { |
|---|
| | 182 | ARRAY_APPEND( listeners_group->listeners, listener ); |
|---|
| | 183 | return; |
|---|
| | 184 | } |
|---|
| | 185 | FOREACH_END() |
|---|
| | 186 | |
|---|
| | 187 | free(listener); |
|---|
| | 188 | libvlc_exception_raise( p_e, |
|---|
| | 189 | "This object event manager doesn't know about '%s' events", |
|---|
| | 190 | libvlc_event_type_name(a)); |
|---|
| 204 | | libvlc_event_listeners_group_t * listeners_group; |
|---|
| 205 | | libvlc_event_listener_t * listener; |
|---|
| 206 | | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| 207 | | if( listeners_group->event_type == event_type ) |
|---|
| 208 | | { |
|---|
| 209 | | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| 210 | | if( listener->event_type == event_type && |
|---|
| 211 | | listener->pf_callback == pf_callback && |
|---|
| 212 | | listener->p_user_data == p_user_data ) |
|---|
| 213 | | { |
|---|
| 214 | | /* that's our listener */ |
|---|
| 215 | | free( listener ); |
|---|
| 216 | | ARRAY_REMOVE( listeners_group->listeners, |
|---|
| 217 | | fe_idx /* This comes from the macro (and that's why |
|---|
| 218 | | I hate macro) */ ); |
|---|
| 219 | | return; |
|---|
| 220 | | } |
|---|
| 221 | | FOREACH_END() |
|---|
| 222 | | } |
|---|
| 223 | | FOREACH_END() |
|---|
| 224 | | |
|---|
| 225 | | libvlc_exception_raise( p_e, |
|---|
| 226 | | "This object event manager doesn't know about '%i,%p,%p' event observer", |
|---|
| 227 | | event_type, pf_callback, p_user_data ); |
|---|
| 228 | | } |
|---|
| 229 | | |
|---|
| | 204 | libvlc_event_listeners_group_t * listeners_group; |
|---|
| | 205 | libvlc_event_listener_t * listener; |
|---|
| | 206 | FOREACH_ARRAY( listeners_group, p_event_manager->listeners_groups ) |
|---|
| | 207 | if( listeners_group->event_type == event_type ) |
|---|
| | 208 | { |
|---|
| | 209 | FOREACH_ARRAY( listener, listeners_group->listeners ) |
|---|
| | 210 | if( listener->event_type == event_type && |
|---|
| | 211 | listener->pf_callback == pf_callback && |
|---|
| | 212 | listener->p_user_data == p_user_data ) |
|---|
| | 213 | { |
|---|
| | 214 | /* that's our listener */ |
|---|
| | 215 | free( listener ); |
|---|
| | 216 | ARRAY_REMOVE( listeners_group->listeners, |
|---|
| | 217 | fe_idx /* This comes from the macro (and that's why |
|---|
| | 218 | I hate macro) */ ); |
|---|
| | 219 | return; |
|---|
| | 220 | } |
|---|
| | 221 | FOREACH_END() |
|---|
| | 222 | } |
|---|
| | 223 | FOREACH_END() |
|---|
| | 224 | |
|---|
| | 225 | libvlc_exception_raise( p_e, |
|---|
| | 226 | "This object event manager doesn't know about '%i,%p,%p' event observer", |
|---|
| | 227 | event_type, pf_callback, p_user_data ); |
|---|
| | 228 | } |
|---|
| | 229 | |
|---|