From 70f816ea49e78da7abc0d13ea1b25e41b5a4077a Mon Sep 17 00:00:00 2001 From: billh Date: Wed, 15 Aug 2001 15:28:37 +0000 Subject: [PATCH] Improvements to listener list management. Changed bridge to receive focus events from ATK and relay to registered "focus:" listeners. Began memory management of event sources when relaying and receiving events. git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@22 e2bd861d-eb25-0410-b326-f6ed22b6b98c --- idl/Accessibility_Event.idl | 1 + idl/Accessibility_Registry.idl | 15 +++- idl/Event.idl | 1 + idl/Registry.idl | 15 +++- libspi/accessible.c | 1 + libspi/listener.c | 18 ++-- libspi/listener.h | 6 +- libspi/registry.c | 188 +++++++++++++++++++++++++++++++++++------ libspi/registry.h | 4 +- registryd/registry.c | 188 +++++++++++++++++++++++++++++++++++------ registryd/registry.h | 4 +- test/app.c | 8 +- test/at.c | 2 +- 13 files changed, 376 insertions(+), 75 deletions(-) diff --git a/idl/Accessibility_Event.idl b/idl/Accessibility_Event.idl index 1d9a2ea..92b6250 100644 --- a/idl/Accessibility_Event.idl +++ b/idl/Accessibility_Event.idl @@ -37,6 +37,7 @@ module Accessibility }; interface EventListener : Bonobo::Unknown { + attribute long hash_id; oneway void notifyEvent (in Event e); }; diff --git a/idl/Accessibility_Registry.idl b/idl/Accessibility_Registry.idl index 09b8957..e6b54d8 100644 --- a/idl/Accessibility_Registry.idl +++ b/idl/Accessibility_Registry.idl @@ -82,7 +82,20 @@ module Accessibility { * **/ - void deregisterGlobalEventListener (in EventListener listener); + void deregisterGlobalEventListenerAll (in EventListener listener); + /** + * deregisterGlobalEventListener: + * @listener: the requesting @EventListener + * @eventName: a string indicating the type of events + * return values: void + * + * Request that a previously registered client stop receiving + * global notifications for events of a certain type. + * + **/ + + void deregisterGlobalEventListener (in EventListener listener, + in string event_name); /** * event types: "Window" "Desktop" * "Window:Create" "Window:Destroy" diff --git a/idl/Event.idl b/idl/Event.idl index 1d9a2ea..92b6250 100644 --- a/idl/Event.idl +++ b/idl/Event.idl @@ -37,6 +37,7 @@ module Accessibility }; interface EventListener : Bonobo::Unknown { + attribute long hash_id; oneway void notifyEvent (in Event e); }; diff --git a/idl/Registry.idl b/idl/Registry.idl index 09b8957..e6b54d8 100644 --- a/idl/Registry.idl +++ b/idl/Registry.idl @@ -82,7 +82,20 @@ module Accessibility { * **/ - void deregisterGlobalEventListener (in EventListener listener); + void deregisterGlobalEventListenerAll (in EventListener listener); + /** + * deregisterGlobalEventListener: + * @listener: the requesting @EventListener + * @eventName: a string indicating the type of events + * return values: void + * + * Request that a previously registered client stop receiving + * global notifications for events of a certain type. + * + **/ + + void deregisterGlobalEventListener (in EventListener listener, + in string event_name); /** * event types: "Window" "Desktop" * "Window:Create" "Window:Destroy" diff --git a/libspi/accessible.c b/libspi/accessible.c index c8493c6..7e9634a 100644 --- a/libspi/accessible.c +++ b/libspi/accessible.c @@ -191,6 +191,7 @@ accessible_new (AtkObject *o) { Accessible *retval = ACCESSIBLE (g_object_new (accessible_get_type (), NULL)); + g_object_ref (o); retval->atko = ATK_OBJECT (o); return retval; } diff --git a/libspi/listener.c b/libspi/listener.c index 5b708a4..0a804e7 100644 --- a/libspi/listener.c +++ b/libspi/listener.c @@ -41,7 +41,7 @@ /* * Our parent Gtk object type */ -#define PARENT_TYPE BONOBO_X_OBJECT_TYPE +#define PARENT_TYPE BONOBO_OBJECT_TYPE /* * A pointer to our parent object class @@ -75,7 +75,15 @@ impl_notify_event (PortableServer_Servant servant, fprintf (stderr, "notify...\n"); fprintf (stderr, "source name: '%s'\n", Accessibility_Accessible__get_name(e->target, ev)); + if (ev->_major != CORBA_NO_EXCEPTION) { + fprintf(stderr, + ("Accessibility app error: exception during event notification: %s\n"), + CORBA_exception_id(ev)); + exit(-1); + } #endif + Accessibility_Accessible_unref(e->target, ev); + } static void @@ -83,7 +91,7 @@ listener_class_init (ListenerClass *klass) { GObjectClass * object_class = (GObjectClass *) klass; POA_Accessibility_EventListener__epv *epv = &klass->epv; - listener_parent_class = g_type_class_ref (BONOBO_X_OBJECT_TYPE); + listener_parent_class = g_type_class_ref (BONOBO_OBJECT_TYPE); object_class->finalize = listener_object_finalize; @@ -114,12 +122,12 @@ listener_get_type (void) NULL /* value table */ }; /* - * Here we use bonobo_x_type_unique instead of + * Here we use bonobo_type_unique instead of * gtk_type_unique, this auto-generates a load of * CORBA structures for us. All derived types must - * use bonobo_x_type_unique. + * use bonobo_type_unique. */ - type = bonobo_x_type_unique ( + type = bonobo_type_unique ( PARENT_TYPE, POA_Accessibility_EventListener__init, NULL, diff --git a/libspi/listener.h b/libspi/listener.h index d74f221..5560f15 100644 --- a/libspi/listener.h +++ b/libspi/listener.h @@ -27,7 +27,7 @@ extern "C" { #endif /* __cplusplus */ -#include +#include #include #include @@ -38,11 +38,11 @@ extern "C" { #define IS_LISTENER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), LISTENER_TYPE)) typedef struct { - BonoboXObject parent; + BonoboObject parent; } Listener; typedef struct { - BonoboXObjectClass parent_class; + BonoboObjectClass parent_class; POA_Accessibility_EventListener__epv epv; } ListenerClass; diff --git a/libspi/registry.c b/libspi/registry.c index c24eb37..94c00b2 100644 --- a/libspi/registry.c +++ b/libspi/registry.c @@ -62,8 +62,18 @@ typedef struct { EventTypeMajor major; char * minor; char * detail; + guint hash; } EventTypeStruct; +typedef struct { + Accessibility_EventListener listener; + guint event_type_hash; +} ListenerStruct; + +/* static function prototypes */ +static void registry_notify_listeners ( GList *listeners, + const Accessibility_Event *e, + CORBA_Environment *ev); /* * Implemented GObject::finalize @@ -119,10 +129,66 @@ compare_object_hash (gconstpointer p1, gconstpointer p2) return ((diff < 0) ? -1 : ((diff > 0) ? 1 : 0)); } +static gint +compare_listener_hash (gconstpointer p1, gconstpointer p2) +{ + return (((ListenerStruct *)p2)->event_type_hash - ((ListenerStruct *)p1)->event_type_hash); +} + static void parse_event_type (EventTypeStruct *etype, char *event_name) { - etype->major = ETYPE_FOCUS; + static gunichar delimiter = 0; + char * major_delim_char; + char * minor_delim_char; + guint nbytes = 0; + + if (!delimiter) + { + delimiter = g_utf8_get_char (":"); + } + major_delim_char = g_utf8_strchr (event_name, (gssize) 32, delimiter); + minor_delim_char = g_utf8_strrchr (event_name, (gssize) 255, delimiter); + + nbytes = (guint)((gint64) minor_delim_char - + (gint64) major_delim_char); + + fprintf ("nbytes = %ld", (long) nbytes); + + if (!g_ascii_strncasecmp (event_name, "focus:", 6)) + { + etype->major = ETYPE_FOCUS; + } + else if (!g_ascii_strncasecmp (event_name, "window:", 7)) + { + etype->major = ETYPE_WINDOW; + } + else + { + etype->major = ETYPE_TOOLKIT; + } + + if (major_delim_char) + { + etype->minor = g_strndup (major_delim_char, nbytes); + etype->hash = g_str_hash (major_delim_char); + } + else + { + etype->minor = g_strdup (""); + etype->hash = g_str_hash (""); + } + if (major_delim_char != minor_delim_char) + { + etype->detail = g_strdup (minor_delim_char); + } + else + { + etype->detail = g_strdup (""); + } + + + /* TODO: don't forget to free the strings from caller when done ! */ } /** @@ -170,13 +236,19 @@ impl_accessibility_registry_register_global_event_listener Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); /* fprintf(stderr, "registering %x/%x\n", listener, *listener); */ + ListenerStruct *ls = g_malloc (sizeof (ListenerStruct)); + EventTypeStruct etype; parse_event_type (&etype, event_name); + ls->event_type_hash = etype.hash; - /* parse, check major event type */ + /* parse, check major event type and add listener accordingly */ switch (etype.major) { case (ETYPE_FOCUS) : + ls->listener = CORBA_Object_duplicate (listener, ev); + registry->focus_listeners = + g_list_append (registry->focus_listeners, ls); break; case (ETYPE_WINDOW) : break; @@ -185,10 +257,25 @@ impl_accessibility_registry_register_global_event_listener default: break; } +} - registry->listeners = g_list_append (registry->listeners, CORBA_Object_duplicate(listener, ev)); - /* fprintf(stderr, "there are now %d listeners registered.\n", g_list_length(registry->listeners)); */ - /* should use hashtable and CORBA_Object_hash (...) */ +/* + * CORBA Accessibility::Registry::deregisterGlobalEventListenerAll method implementation + */ +static void +impl_accessibility_registry_deregister_global_event_listener_all + (PortableServer_Servant servant, + Accessibility_EventListener listener, + CORBA_Environment *ev) +{ + Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + GList *list = g_list_find_custom (registry->focus_listeners, listener, compare_object_hash); + while (list) + { + fprintf (stderr, "deregistering listener\n"); + registry->focus_listeners = g_list_delete_link (registry->focus_listeners, list); + list = g_list_find_custom (registry->focus_listeners, listener, compare_object_hash); + } } /* @@ -198,12 +285,22 @@ static void impl_accessibility_registry_deregister_global_event_listener (PortableServer_Servant servant, Accessibility_EventListener listener, + const CORBA_char * event_name, CORBA_Environment *ev) { Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); - /* TODO: this won't work since 'listener' is a duplicate ref */ - registry->listeners = g_list_remove (registry->listeners, listener); - /* fprintf(stderr, "deregister\n"); */ + ListenerStruct ls; + EventTypeStruct etype; + GList *list; + parse_event_type (&etype, event_name); + ls.event_type_hash = etype.hash; + list = g_list_find_custom (registry->focus_listeners, &ls, compare_listener_hash); + + if (list) + { + fprintf (stderr, "deregistering listener\n"); + registry->applications = g_list_delete_link (registry->focus_listeners, list); + } } @@ -282,31 +379,63 @@ impl_registry_notify_event (PortableServer_Servant servant, const Accessibility_Event *e, CORBA_Environment *ev) { - int n; - int len; Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + EventTypeStruct etype; - /** - * TODO: - * - * distinguish between event types - * find non-strcmp method of matching event types to listeners - * - **/ + parse_event_type (&etype, e->type); - len = g_list_length (registry->listeners); - /* fprintf(stderr, "%d listeners registered\n", len); */ + switch (etype.major) + { + 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); +} + +static void +registry_notify_listeners ( GList *listeners, + const Accessibility_Event *e, + CORBA_Environment *ev) +{ + int n; + int len; + ListenerStruct *ls; + EventTypeStruct etype; + parse_event_type (&etype, e->type); + len = g_list_length (listeners); for (n=0; ntarget, ev)); + fprintf(stderr, "event hashes: %lx %lx\n", ls->event_type_hash, etype.hash); #endif - Accessibility_EventListener_notifyEvent ( - (Accessibility_EventListener) g_list_nth_data (registry->listeners, n), - e, - ev); + if ((ls->event_type_hash == etype.hash) || (TRUE)) + { +#ifdef SPI_DEBUG + fprintf(stderr, "notifying listener #%d\n", n); + fprintf(stderr, "event name %s\n", Accessibility_Accessible__get_name(e->target, ev)); +#endif + Accessibility_Accessible_ref (e->target, 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); + } + } } } @@ -324,6 +453,7 @@ registry_class_init (RegistryClass *klass) epv->deregisterApplication = impl_accessibility_registry_deregister_application; epv->registerGlobalEventListener = impl_accessibility_registry_register_global_event_listener; epv->deregisterGlobalEventListener = impl_accessibility_registry_deregister_global_event_listener; + epv->deregisterGlobalEventListenerAll = impl_accessibility_registry_deregister_global_event_listener_all; epv->getDesktopCount = impl_accessibility_registry_get_desktop_count; epv->getDesktop = impl_accessibility_registry_get_desktop; epv->getDesktopList = impl_accessibility_registry_get_desktop_list; @@ -334,7 +464,9 @@ registry_class_init (RegistryClass *klass) static void registry_init (Registry *registry) { - registry->listeners = NULL; + registry->focus_listeners = NULL; + registry->window_listeners = NULL; + registry->toolkit_listeners = NULL; registry->applications = NULL; registry->desktop = desktop_new(); } @@ -358,10 +490,10 @@ registry_get_type (void) NULL /* value table */ }; /* - * Here we use bonobo_x_type_unique instead of + * Here we use bonobo_type_unique instead of * gtk_type_unique, this auto-generates a load of * CORBA structures for us. All derived types must - * use bonobo_x_type_unique. + * use bonobo_type_unique. */ type = bonobo_type_unique ( PARENT_TYPE, diff --git a/libspi/registry.h b/libspi/registry.h index 4b8c990..18fe392 100644 --- a/libspi/registry.h +++ b/libspi/registry.h @@ -39,7 +39,9 @@ extern "C" { typedef struct { Listener parent; - GList *listeners; + GList *focus_listeners; + GList *window_listeners; + GList *toolkit_listeners; GList *applications; Desktop *desktop; } Registry; diff --git a/registryd/registry.c b/registryd/registry.c index c24eb37..94c00b2 100644 --- a/registryd/registry.c +++ b/registryd/registry.c @@ -62,8 +62,18 @@ typedef struct { EventTypeMajor major; char * minor; char * detail; + guint hash; } EventTypeStruct; +typedef struct { + Accessibility_EventListener listener; + guint event_type_hash; +} ListenerStruct; + +/* static function prototypes */ +static void registry_notify_listeners ( GList *listeners, + const Accessibility_Event *e, + CORBA_Environment *ev); /* * Implemented GObject::finalize @@ -119,10 +129,66 @@ compare_object_hash (gconstpointer p1, gconstpointer p2) return ((diff < 0) ? -1 : ((diff > 0) ? 1 : 0)); } +static gint +compare_listener_hash (gconstpointer p1, gconstpointer p2) +{ + return (((ListenerStruct *)p2)->event_type_hash - ((ListenerStruct *)p1)->event_type_hash); +} + static void parse_event_type (EventTypeStruct *etype, char *event_name) { - etype->major = ETYPE_FOCUS; + static gunichar delimiter = 0; + char * major_delim_char; + char * minor_delim_char; + guint nbytes = 0; + + if (!delimiter) + { + delimiter = g_utf8_get_char (":"); + } + major_delim_char = g_utf8_strchr (event_name, (gssize) 32, delimiter); + minor_delim_char = g_utf8_strrchr (event_name, (gssize) 255, delimiter); + + nbytes = (guint)((gint64) minor_delim_char - + (gint64) major_delim_char); + + fprintf ("nbytes = %ld", (long) nbytes); + + if (!g_ascii_strncasecmp (event_name, "focus:", 6)) + { + etype->major = ETYPE_FOCUS; + } + else if (!g_ascii_strncasecmp (event_name, "window:", 7)) + { + etype->major = ETYPE_WINDOW; + } + else + { + etype->major = ETYPE_TOOLKIT; + } + + if (major_delim_char) + { + etype->minor = g_strndup (major_delim_char, nbytes); + etype->hash = g_str_hash (major_delim_char); + } + else + { + etype->minor = g_strdup (""); + etype->hash = g_str_hash (""); + } + if (major_delim_char != minor_delim_char) + { + etype->detail = g_strdup (minor_delim_char); + } + else + { + etype->detail = g_strdup (""); + } + + + /* TODO: don't forget to free the strings from caller when done ! */ } /** @@ -170,13 +236,19 @@ impl_accessibility_registry_register_global_event_listener Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); /* fprintf(stderr, "registering %x/%x\n", listener, *listener); */ + ListenerStruct *ls = g_malloc (sizeof (ListenerStruct)); + EventTypeStruct etype; parse_event_type (&etype, event_name); + ls->event_type_hash = etype.hash; - /* parse, check major event type */ + /* parse, check major event type and add listener accordingly */ switch (etype.major) { case (ETYPE_FOCUS) : + ls->listener = CORBA_Object_duplicate (listener, ev); + registry->focus_listeners = + g_list_append (registry->focus_listeners, ls); break; case (ETYPE_WINDOW) : break; @@ -185,10 +257,25 @@ impl_accessibility_registry_register_global_event_listener default: break; } +} - registry->listeners = g_list_append (registry->listeners, CORBA_Object_duplicate(listener, ev)); - /* fprintf(stderr, "there are now %d listeners registered.\n", g_list_length(registry->listeners)); */ - /* should use hashtable and CORBA_Object_hash (...) */ +/* + * CORBA Accessibility::Registry::deregisterGlobalEventListenerAll method implementation + */ +static void +impl_accessibility_registry_deregister_global_event_listener_all + (PortableServer_Servant servant, + Accessibility_EventListener listener, + CORBA_Environment *ev) +{ + Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + GList *list = g_list_find_custom (registry->focus_listeners, listener, compare_object_hash); + while (list) + { + fprintf (stderr, "deregistering listener\n"); + registry->focus_listeners = g_list_delete_link (registry->focus_listeners, list); + list = g_list_find_custom (registry->focus_listeners, listener, compare_object_hash); + } } /* @@ -198,12 +285,22 @@ static void impl_accessibility_registry_deregister_global_event_listener (PortableServer_Servant servant, Accessibility_EventListener listener, + const CORBA_char * event_name, CORBA_Environment *ev) { Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); - /* TODO: this won't work since 'listener' is a duplicate ref */ - registry->listeners = g_list_remove (registry->listeners, listener); - /* fprintf(stderr, "deregister\n"); */ + ListenerStruct ls; + EventTypeStruct etype; + GList *list; + parse_event_type (&etype, event_name); + ls.event_type_hash = etype.hash; + list = g_list_find_custom (registry->focus_listeners, &ls, compare_listener_hash); + + if (list) + { + fprintf (stderr, "deregistering listener\n"); + registry->applications = g_list_delete_link (registry->focus_listeners, list); + } } @@ -282,31 +379,63 @@ impl_registry_notify_event (PortableServer_Servant servant, const Accessibility_Event *e, CORBA_Environment *ev) { - int n; - int len; Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + EventTypeStruct etype; - /** - * TODO: - * - * distinguish between event types - * find non-strcmp method of matching event types to listeners - * - **/ + parse_event_type (&etype, e->type); - len = g_list_length (registry->listeners); - /* fprintf(stderr, "%d listeners registered\n", len); */ + switch (etype.major) + { + 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); +} + +static void +registry_notify_listeners ( GList *listeners, + const Accessibility_Event *e, + CORBA_Environment *ev) +{ + int n; + int len; + ListenerStruct *ls; + EventTypeStruct etype; + parse_event_type (&etype, e->type); + len = g_list_length (listeners); for (n=0; ntarget, ev)); + fprintf(stderr, "event hashes: %lx %lx\n", ls->event_type_hash, etype.hash); #endif - Accessibility_EventListener_notifyEvent ( - (Accessibility_EventListener) g_list_nth_data (registry->listeners, n), - e, - ev); + if ((ls->event_type_hash == etype.hash) || (TRUE)) + { +#ifdef SPI_DEBUG + fprintf(stderr, "notifying listener #%d\n", n); + fprintf(stderr, "event name %s\n", Accessibility_Accessible__get_name(e->target, ev)); +#endif + Accessibility_Accessible_ref (e->target, 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); + } + } } } @@ -324,6 +453,7 @@ registry_class_init (RegistryClass *klass) epv->deregisterApplication = impl_accessibility_registry_deregister_application; epv->registerGlobalEventListener = impl_accessibility_registry_register_global_event_listener; epv->deregisterGlobalEventListener = impl_accessibility_registry_deregister_global_event_listener; + epv->deregisterGlobalEventListenerAll = impl_accessibility_registry_deregister_global_event_listener_all; epv->getDesktopCount = impl_accessibility_registry_get_desktop_count; epv->getDesktop = impl_accessibility_registry_get_desktop; epv->getDesktopList = impl_accessibility_registry_get_desktop_list; @@ -334,7 +464,9 @@ registry_class_init (RegistryClass *klass) static void registry_init (Registry *registry) { - registry->listeners = NULL; + registry->focus_listeners = NULL; + registry->window_listeners = NULL; + registry->toolkit_listeners = NULL; registry->applications = NULL; registry->desktop = desktop_new(); } @@ -358,10 +490,10 @@ registry_get_type (void) NULL /* value table */ }; /* - * Here we use bonobo_x_type_unique instead of + * Here we use bonobo_type_unique instead of * gtk_type_unique, this auto-generates a load of * CORBA structures for us. All derived types must - * use bonobo_x_type_unique. + * use bonobo_type_unique. */ type = bonobo_type_unique ( PARENT_TYPE, diff --git a/registryd/registry.h b/registryd/registry.h index 4b8c990..18fe392 100644 --- a/registryd/registry.h +++ b/registryd/registry.h @@ -39,7 +39,9 @@ extern "C" { typedef struct { Listener parent; - GList *listeners; + GList *focus_listeners; + GList *window_listeners; + GList *toolkit_listeners; GList *applications; Desktop *desktop; } Registry; diff --git a/test/app.c b/test/app.c index 1b5566e..ccc4be8 100644 --- a/test/app.c +++ b/test/app.c @@ -53,10 +53,7 @@ main(int argc, char **argv) } /* Create the accesssible application server object */ - /* TODO: get app name and pid */ - if (argc > 1) - snprintf(sbuf, APP_STATIC_BUFF_SZ, "application-%s", - (argc > 1) ? argv[1] : "test"); + sprintf(sbuf, "application-%s", g_get_prgname()); atko = g_object_new (atk_object_get_type(), NULL); atk_object_set_name (atko, sbuf); @@ -67,9 +64,8 @@ main(int argc, char **argv) accessible = accessible_new (atko); fprintf(stderr, "accessible created.\n"); - /* FIXME: this type of event struct will leak, needs to be redefined */ e.target = bonobo_object_corba_objref ( bonobo_object (accessible)); - e.type = CORBA_string_dup ("test"); + e.type = CORBA_string_dup ("focus:"); obj_id = "OAFIID:Accessibility_Registry:proto0.1"; diff --git a/test/at.c b/test/at.c index ba3702d..8964c18 100644 --- a/test/at.c +++ b/test/at.c @@ -77,7 +77,7 @@ main(int argc, char **argv) (registry, (Accessibility_EventListener) bonobo_object_corba_objref (bonobo_object (listener)), - "test", + "focus:", &ev); fprintf (stderr, "AT callback registered.\n"); -- 2.7.4