- case (ETYPE_FOCUS) :
- registry_notify_listeners (registry->focus_listeners, e, ev);
- break;
- case (ETYPE_WINDOW) :
- registry_notify_listeners (registry->window_listeners, e, ev);
- break;
- case (ETYPE_TOOLKIT) :
- registry_notify_listeners (registry->toolkit_listeners, e, ev);
- break;
- default:
- break;
- }
- Accessibility_Accessible_unref (e->target, ev);
+#ifdef SPI_DEBUG
+ fprintf (stderr, "notifying listener %d\n", g_list_index (listeners, l->data));
+ s = Accessibility_Accessible__get_name (ctx->source, ev);
+ fprintf (stderr, "event source name %s\n", s);
+ CORBA_free (s);
+#endif
+
+ ctx->e_out.source = bonobo_object_dup_ref (ctx->source, ctx->ev);
+ if (BONOBO_EX (ctx->ev))
+ {
+ return SPI_RE_ENTRANT_CONTINUE;;
+ }
+
+ if ((*list) && (*list)->data == ls)
+ {
+ Accessibility_EventListener_notifyEvent (
+ (Accessibility_EventListener) ls->listener, &ctx->e_out, ctx->ev);
+ if (ctx->ev->_major != CORBA_NO_EXCEPTION)
+ {
+ g_warning ("Accessibility app error: exception during "
+ "event notification: %s\n",
+ CORBA_exception_id (ctx->ev));
+ }
+ }
+ else /* dup re-entered */
+ {
+ bonobo_object_release_unref (ctx->e_out.source, ctx->ev);
+ }
+ }
+
+ return SPI_RE_ENTRANT_CONTINUE;