X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libspi%2Fregistry.c;h=51a3cb460f18b953bb1e386770d0bb02c8520f2a;hb=4328426aeae1eeed7c2e696536351b224eeddbce;hp=fc4fb86ab082841bccea1bca7434d0cb9c4af52e;hpb=43e27124b49e819f8c3741915e140f7d0186d615;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/libspi/registry.c b/libspi/registry.c index fc4fb86..51a3cb4 100644 --- a/libspi/registry.c +++ b/libspi/registry.c @@ -33,6 +33,7 @@ * Anyone want to help? */ #include +#include #include #include @@ -70,7 +71,7 @@ typedef struct { } SpiListenerStruct; /* static function prototypes */ -static void _registry_notify_listeners ( GList *listeners, +static void _registry_notify_listeners (GList *listeners, const Accessibility_Event *e, CORBA_Environment *ev); @@ -186,7 +187,6 @@ compare_listener_corbaref (gconstpointer p1, gconstpointer p2) static void parse_event_type (EventTypeStruct *etype, char *event_name) { - guint nbytes = 0; gchar **split_string; split_string = g_strsplit(event_name, ":", 4); @@ -258,7 +258,7 @@ impl_accessibility_registry_deregister_application (PortableServer_Servant serva CORBA_Environment * ev) { SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); - GList *list = g_list_find_custom (registry->desktop->applications, &application, compare_corba_objects); + GList *list = g_list_find_custom (registry->desktop->applications, application, compare_corba_objects); #ifdef SPI_DEBUG gint i; @@ -272,15 +272,18 @@ impl_accessibility_registry_deregister_application (PortableServer_Servant serva registry->desktop->applications = g_list_delete_link (registry->desktop->applications, list); #ifdef SPI_DEBUG fprintf (stderr, "there are now %d apps registered.\n", g_list_length (registry->desktop->applications)); - for (i = 0; i < g_list_length (registry->desktop->applications); ++i) { + for (i = 0; i < g_list_length (registry->desktop->applications); ++i) + { fprintf (stderr, "getting application %d\n", i); fprintf (stderr, "object address %p\n", - g_list_nth_data (registry->desktop->applications, i)); - } + g_list_nth_data (registry->desktop->applications, i)); + } #endif } else - fprintf (stderr, "could not deregister application\n"); + { + fprintf (stderr, "could not deregister application %p\n", application); + } } /* @@ -296,7 +299,6 @@ impl_accessibility_registry_register_global_event_listener ( SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); SpiListenerStruct *ls = g_malloc (sizeof (SpiListenerStruct)); EventTypeStruct etype; - gboolean is_toolkit_specific = TRUE; fprintf(stderr, "registering for events of type %s\n", event_name); @@ -395,9 +397,13 @@ impl_accessibility_registry_deregister_global_event_listener ( listeners = ®istry->toolkit_listeners; break; default: + listeners = NULL; break; } + if (!listeners) + return; + ls.event_type_hash = etype.hash; list = g_list_find_custom (*listeners, &ls, compare_listener_hash); @@ -520,16 +526,17 @@ _get_unique_id () } static void -_registry_notify_listeners ( GList *listeners, - const Accessibility_Event *e, +_registry_notify_listeners (GList *listeners, + const Accessibility_Event *e_in, CORBA_Environment *ev) { int n; int len; SpiListenerStruct *ls; EventTypeStruct etype; + Accessibility_Event *e_out; guint minor_hash; - parse_event_type (&etype, e->type); + parse_event_type (&etype, e_in->type); minor_hash = g_str_hash (g_strconcat (etype.major, etype.minor, NULL)); len = g_list_length (listeners); @@ -544,13 +551,16 @@ _registry_notify_listeners ( GList *listeners, { #ifdef SPI_DEBUG fprintf(stderr, "notifying listener #%d\n", n); - fprintf(stderr, "event source name %s\n", Accessibility_Accessible__get_name(e->source, ev)); + fprintf(stderr, "event source name %s\n", Accessibility_Accessible__get_name(e_in->source, ev)); #endif - e->source = CORBA_Object_duplicate (e->source, ev); - Accessibility_Accessible_ref ( e->source, ev); + e_out = ORBit_copy_value (e_in, TC_Accessibility_Event); + e_out->source = CORBA_Object_duplicate (e_in->source, ev); + Accessibility_Accessible_ref ( e_out->source, ev); Accessibility_EventListener_notifyEvent ((Accessibility_EventListener) ls->listener, - e, + e_out, ev); + /* is it safe to free e_out now ? notifyEvent is a oneway... */ + CORBA_free (e_out); if (ev->_major != CORBA_NO_EXCEPTION) { fprintf(stderr, ("Accessibility app error: exception during event notification: %s\n"), @@ -561,7 +571,8 @@ _registry_notify_listeners ( GList *listeners, } } -static gboolean _device_event_controller_hook (gpointer p) +static gboolean +_device_event_controller_hook (gpointer p) { SpiRegistry *registry = (SpiRegistry *)p; SpiDeviceEventController *controller = registry->device_event_controller;