- ls = (SpiListenerStruct *) g_list_nth_data (listeners, n);
-#ifdef SPI_SPI_LISTENER_DEBUG
- fprintf(stderr, "event hashes: %lx %lx %lx\n", ls->event_type_hash, etype.hash, minor_hash);
- fprintf(stderr, "event name: %s\n", etype.event_name);
-#endif
- if ((ls->event_type_hash == etype.hash) || (ls->event_type_hash == minor_hash))
- {
-#ifdef SPI_DEBUG
- fprintf(stderr, "notifying listener #%d\n", n);
- fprintf(stderr, "event source name %s\n", Accessibility_Accessible__get_name(e->source, ev));
-#endif
- e->source = CORBA_Object_duplicate (e->source, ev);
- Accessibility_Accessible_ref ( e->source, ev);
- Accessibility_EventListener_notifyEvent ((Accessibility_EventListener) ls->listener,
- e,
- ev);
- if (ev->_major != CORBA_NO_EXCEPTION) {
- fprintf(stderr,
- ("Accessibility app error: exception during event notification: %s\n"),
- CORBA_exception_id(ev));
- exit(-1);
- }
- }
+ ctx.ev = ev;
+ ctx.e_out = *e;
+ ctx.source = e->source;
+
+ spi_re_entrant_list_foreach (list, notify_listeners_cb, &ctx);