+notify_listeners (GList *listeners, Accessibility_Event *e, CORBA_Environment *ev)
+{
+ int n_listeners=0;
+ int i;
+ if (listeners) n_listeners = g_list_length (listeners);
+
+ for (i=0; i<n_listeners; ++i) {
+ Accessibility_EventListener listener;
+ e->source = bonobo_object_dup_ref (e->source, ev);
+ listener = (Accessibility_EventListener) g_list_nth_data (listeners, i);
+ Accessibility_EventListener_notifyEvent (listener, e, ev);
+ /*
+ * when this (oneway) call completes, the CORBA refcount and
+ * Bonobo_Unknown refcount will be decremented by the recipient
+ */
+ }
+}
+
+static char *
+lookup_toolkit_event_for_name (char *generic_name)
+{
+ char *toolkit_specific_name;
+ SpiApplicationClass *klass = g_type_class_peek (SPI_APPLICATION_TYPE);
+#ifdef SPI_DEBUG
+ fprintf (stderr, "looking for %s in hash table.\n", generic_name);
+#endif
+ toolkit_specific_name =
+ (char *) g_hash_table_lookup (klass->toolkit_event_names, generic_name);
+#ifdef SPI_DEBUG
+ fprintf (stderr, "generic event %s converted to %s\n", generic_name, toolkit_specific_name);
+#endif
+ return toolkit_specific_name;
+}
+
+static char *
+reverse_lookup_name_for_toolkit_event (char *toolkit_specific_name)
+{
+ char *generic_name;
+ SpiApplicationClass *klass = g_type_class_peek (SPI_APPLICATION_TYPE);
+#ifdef SPI_DEBUG
+ fprintf (stderr, "(reverse lookup) looking for %s in hash table.\n", toolkit_specific_name);
+#endif
+ generic_name =
+ (char *) g_hash_table_lookup (klass->generic_event_names, toolkit_specific_name);
+#ifdef SPI_DEBUG
+ fprintf (stderr, "toolkit event %s converted to %s\n", toolkit_specific_name, generic_name);
+#endif
+ return generic_name;
+}
+
+static void
+init_toolkit_names (GHashTable **generic_event_names, GHashTable **toolkit_event_names)
+{
+ *toolkit_event_names = g_hash_table_new (g_str_hash, g_str_equal);
+ *generic_event_names = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (*toolkit_event_names,
+ "object:property-change",
+ "Gtk:AtkObject:property-change");
+ g_hash_table_insert (*generic_event_names,
+ "Gtk:AtkObject:property-change",
+ "object:property-change");
+#ifdef SPI_DEBUG
+ fprintf (stderr, "inserted spi_selection_changed hash\n");
+#endif
+}
+
+static void
+spi_application_class_init (SpiApplicationClass *klass)