static void
+desktop_add_application (SpiDesktop *desktop,
+ guint index, gpointer data)
+{
+ BonoboObject *registry = BONOBO_OBJECT (data);
+ Accessibility_Event e;
+ CORBA_Environment ev;
+
+ e.type = g_strdup ("object:children-changed::add");
+ e.source = BONOBO_OBJREF (desktop);
+ e.detail1 = index;
+ e.detail2 = 0;
+ CORBA_exception_init (&ev);
+ Accessibility_Registry_notifyEvent (BONOBO_OBJREF (registry),
+ &e, &ev);
+ CORBA_exception_free (&ev);
+}
+
+
+
+static void
+desktop_remove_application (SpiDesktop *desktop,
+ guint index, gpointer data)
+{
+ BonoboObject *registry = BONOBO_OBJECT (data);
+ Accessibility_Event e;
+ CORBA_Environment ev;
+
+ e.type = g_strdup ("object:children-changed::remove");
+ e.source = BONOBO_OBJREF (desktop);
+ e.detail1 = index;
+ e.detail2 = 0;
+ CORBA_exception_init (&ev);
+ Accessibility_Registry_notifyEvent (BONOBO_OBJREF (registry),
+ &e, &ev);
+ CORBA_exception_free (&ev);
+}
+
+
+
+static void
spi_registry_object_finalize (GObject *object)
{
printf ("spi_registry_object_finalize called\n");
}
}
-static SpiReEnterantContinue
+static SpiReEntrantContinue
remove_listener_cb (GList * const *list, gpointer user_data)
{
SpiListenerStruct *ls = (SpiListenerStruct *) (*list)->data;
if (CORBA_Object_is_equivalent (ls->listener, listener, &ev))
{
- spi_re_enterant_list_delete_link (list);
+ spi_re_entrant_list_delete_link (list);
spi_listener_struct_free (ls, &ev);
}
CORBA_exception_free (&ev);
- return SPI_RE_ENTERANT_CONTINUE;
+ return SPI_RE_ENTRANT_CONTINUE;
}
/*
for (i = 0; i < sizeof (lists) / sizeof (lists[0]); i++)
{
- spi_re_enterant_list_foreach (lists [i], remove_listener_cb, listener);
+ spi_re_entrant_list_foreach (lists [i], remove_listener_cb, listener);
}
}
parse_event_type (&etype, (char *) event_name);
- spi_re_enterant_list_foreach (get_listener_list (registry, etype.type_cat),
+ spi_re_entrant_list_foreach (get_listener_list (registry, etype.type_cat),
remove_listener_cb, listener);
}
Accessibility_Event e_out;
} NotifyContext;
-static SpiReEnterantContinue
+static SpiReEntrantContinue
notify_listeners_cb (GList * const *list, gpointer user_data)
{
SpiListenerStruct *ls;
ctx->e_out.source = bonobo_object_dup_ref (ctx->source, ctx->ev);
if (BONOBO_EX (ctx->ev))
{
- return SPI_RE_ENTERANT_CONTINUE;;
+ return SPI_RE_ENTRANT_CONTINUE;;
}
if ((*list) && (*list)->data == ls)
}
}
- return SPI_RE_ENTERANT_CONTINUE;
+ return SPI_RE_ENTRANT_CONTINUE;
}
static void
ctx.source = e->source;
parse_event_type (&ctx.etype, e->type);
- spi_re_enterant_list_foreach (list, notify_listeners_cb, &ctx);
+ spi_re_entrant_list_foreach (list, notify_listeners_cb, &ctx);
}
if (e->source != CORBA_OBJECT_NIL)
registry->window_listeners = NULL;
registry->toolkit_listeners = NULL;
registry->desktop = spi_desktop_new ();
+ /* Register callback notification for application addition and removal */
+ g_signal_connect (G_OBJECT (registry->desktop),
+ "application_added",
+ G_CALLBACK (desktop_add_application),
+ registry);
+
+ g_signal_connect (G_OBJECT (registry->desktop),
+ "application_removed",
+ G_CALLBACK (desktop_remove_application),
+ registry);
+
registry->de_controller = NULL;
}