/* registry.c: the main accessibility service registry implementation */
#undef SPI_LISTENER_DEBUG
+#undef SPI_DEBUG
#include <config.h>
#ifdef SPI_DEBUG
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");
if (split_string[1])
{
+ etype->major = g_quark_from_string (split_string[1]);
if (split_string[2])
{
etype->minor = g_quark_from_string (s = g_strconcat (split_string[1], split_string[2], NULL));
if (split_string[3])
{
etype->detail = g_quark_from_string (split_string[3]);
- s = g_strconcat (split_string[1], split_string[2], split_string[3], NULL);
- etype->major = g_quark_from_string (s);
- g_free (s);
}
else
{
etype->detail = g_quark_from_static_string ("");
- s = g_strconcat (split_string[1], split_string[2], NULL);
- etype->major = g_quark_from_string (s);
- g_free (s);
}
}
else
{
- etype->major = g_quark_from_string (split_string[1]);
etype->minor = etype->major;
- etype->detail = etype->major;
+ etype->detail = g_quark_from_static_string (""); //etype->major;
}
}
else
const CORBA_char *event_name,
CORBA_Environment *ev)
{
- SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant));
+ SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant));
SpiListenerStruct *ls = spi_listener_struct_new (listener, ev);
EventTypeStruct etype;
GList **list;
#ifdef SPI_DEBUG
+ fprintf (stderr, "registering");
fprintf (stderr, "registering for events of type %s\n", event_name);
#endif
ls = (*list)->data;
#ifdef SPI_LISTENER_DEBUG
- fprintf (stderr, "event quarks: %lx %lx %lx\n", ls->event_type_quark, etype.major, etype.minor);
- fprintf (stderr, "event name: %s\n", etype.event_name);
+ fprintf (stderr, "event quarks: %lx %lx %lx\n", ls->event_type_quark, ctx->etype.major, ctx->etype.minor);
+ fprintf (stderr, "event name: %s\n", ctx->etype.event_name);
#endif
if ((ls->event_type_quark == ctx->etype.major) ||
(ls->event_type_quark == ctx->etype.minor))
{
#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, "notifying listener %d\n", 0);
+/* g_list_index (list, l->data)); */
+ s = Accessibility_Accessible__get_name (ctx->source, ctx->ev);
fprintf (stderr, "event source name %s\n", s);
CORBA_free (s);
#endif
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;
}