X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libspi%2Fregistry.c;h=06a7f613b5553b8345cf2a0bdc4199e773e1c2ea;hb=f546ac72097fabd106a0cf277d4db389b811014c;hp=14622fddacec622c74dda53a55af058a6b839f5a;hpb=7ff7c0d0b863f7346f21e03b6d170e8c7c6f9878;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/libspi/registry.c b/libspi/registry.c index 14622fd..06a7f61 100644 --- a/libspi/registry.c +++ b/libspi/registry.c @@ -20,20 +20,12 @@ * Boston, MA 02111-1307, USA. */ -/* - * registry.c: the main accessibility service registry implementation - */ +/* registry.c: the main accessibility service registry implementation */ +#include #ifdef SPI_DEBUG -#include +# include #endif -#include -#include - -/* - * This pulls the CORBA definitions for the "Accessibility::Registry" server - */ -#include /* * We'd like to replace the dependance on X-isms with a wrapper layer, @@ -43,20 +35,13 @@ #include #include -/* - * This pulls the definition for the BonoboObject (GType) - */ -#include "registry.h" +#include -/* - * Our parent GObject type - */ -#define PARENT_TYPE LISTENER_TYPE +/* Our parent GObject type */ +#define PARENT_TYPE SPI_LISTENER_TYPE -/* - * A pointer to our parent object class - */ -static ListenerClass *registry_parent_class; +/* A pointer to our parent object class */ +static SpiListenerClass *spi_registry_parent_class; typedef enum { ETYPE_FOCUS, @@ -64,6 +49,8 @@ typedef enum { ETYPE_PROPERTY, ETYPE_WINDOW, ETYPE_TOOLKIT, + ETYPE_KEYBOARD, + ETYPE_LAST_DEFINED } EventTypeCategory; @@ -80,7 +67,7 @@ typedef struct { Accessibility_EventListener listener; guint event_type_hash; EventTypeCategory event_type_cat; -} ListenerStruct; +} SpiListenerStruct; /* static function prototypes */ static void _registry_notify_listeners ( GList *listeners, @@ -95,12 +82,12 @@ static gboolean _device_event_controller_hook (gpointer source); * Implemented GObject::finalize */ static void -registry_object_finalize (GObject *object) +spi_registry_object_finalize (GObject *object) { -/* Registry *registry = REGISTRY (object); */ +/* SpiRegistry *registry = SPI_REGISTRY (object); */ GObjectClass *object_class = G_OBJECT_GET_CLASS( object); - printf("registry_object_finalize called\n"); + printf("spi_registry_object_finalize called\n"); object_class->finalize (object); } @@ -118,7 +105,7 @@ impl_accessibility_registry_register_application (PortableServer_Servant servant const Accessibility_Application application, CORBA_Environment * ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); #ifdef SPI_DEBUG fprintf (stderr, "registering app %p\n", application); @@ -131,7 +118,7 @@ impl_accessibility_registry_register_application (PortableServer_Servant servant /* * TODO: change the implementation below to a WM-aware one; - * e.g. don't add all apps to the Desktop + * e.g. don't add all apps to the SpiDesktop */ } @@ -140,18 +127,18 @@ compare_corba_objects (gconstpointer p1, gconstpointer p2) { CORBA_Environment ev; gint retval; - retval = !CORBA_Object_is_equivalent ((CORBA_Object) p1, (CORBA_Object) p2, &ev); #ifdef SPI_DEBUG - fprintf (stderr, "comparing %p to %p; result %d\n", - p1, p2, - retval); + fprintf (stderr, "comparing %p to %p\n", + p1, p2); #endif + + retval = !CORBA_Object_is_equivalent ((CORBA_Object) p1, (CORBA_Object) p2, &ev); return retval; } static void -register_with_toolkits (Registry *registry_bonobo_object, EventTypeStruct *etype, CORBA_Environment *ev) +register_with_toolkits (SpiRegistry *spi_registry_bonobo_object, EventTypeStruct *etype, CORBA_Environment *ev) { gint n_desktops; gint n_apps; @@ -159,7 +146,7 @@ register_with_toolkits (Registry *registry_bonobo_object, EventTypeStruct *etype Accessibility_Desktop desktop; Accessibility_Application app; Accessibility_Registry registry; - registry = BONOBO_OBJREF (registry_bonobo_object); + registry = BONOBO_OBJREF (spi_registry_bonobo_object); /* for each app in each desktop, call ...Application_registerToolkitEventListener */ @@ -186,7 +173,14 @@ register_with_toolkits (Registry *registry_bonobo_object, EventTypeStruct *etype static gint compare_listener_hash (gconstpointer p1, gconstpointer p2) { - return (((ListenerStruct *)p2)->event_type_hash - ((ListenerStruct *)p1)->event_type_hash); + return (((SpiListenerStruct *)p2)->event_type_hash - ((SpiListenerStruct *)p1)->event_type_hash); +} + +static gint +compare_listener_corbaref (gconstpointer p1, gconstpointer p2) +{ + return compare_corba_objects (((SpiListenerStruct *)p2)->listener, + ((SpiListenerStruct *)p1)->listener); } static void @@ -263,8 +257,8 @@ impl_accessibility_registry_deregister_application (PortableServer_Servant serva const Accessibility_Application application, CORBA_Environment * ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); - GList *list = g_list_find_custom (registry->desktop->applications, application, compare_corba_objects); + SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); + GList *list = g_list_find_custom (registry->desktop->applications, &application, compare_corba_objects); #ifdef SPI_DEBUG gint i; @@ -299,15 +293,15 @@ impl_accessibility_registry_register_global_event_listener ( const CORBA_char *event_name, CORBA_Environment *ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); - ListenerStruct *ls = g_malloc (sizeof (ListenerStruct)); + 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); /* parse, check major event type and add listener accordingly */ - parse_event_type (&etype, event_name); + parse_event_type (&etype, (char*) event_name); ls->event_type_hash = etype.hash; ls->event_type_cat = etype.type_cat; @@ -343,8 +337,12 @@ impl_accessibility_registry_deregister_global_event_listener_all ( Accessibility_EventListener listener, CORBA_Environment *ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); - GList *list = g_list_find_custom (registry->object_listeners, listener, compare_corba_objects); + SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); + SpiListenerStruct *ls = g_malloc (sizeof (SpiListenerStruct)); + GList *list; + ls->listener = listener; + list = g_list_find_custom (registry->object_listeners, ls, + compare_listener_corbaref); /* * TODO : de-register with toolkit if the last instance of a listener @@ -355,14 +353,14 @@ impl_accessibility_registry_deregister_global_event_listener_all ( { fprintf (stderr, "deregistering listener\n"); registry->object_listeners = g_list_delete_link (registry->object_listeners, list); - list = g_list_find_custom (registry->object_listeners, listener, compare_corba_objects); + list = g_list_find_custom (registry->object_listeners, ls, compare_listener_corbaref); } - list = g_list_find_custom (registry->toolkit_listeners, listener, compare_corba_objects); + list = g_list_find_custom (registry->toolkit_listeners, ls, compare_listener_corbaref); while (list) { fprintf (stderr, "deregistering listener\n"); registry->toolkit_listeners = g_list_delete_link (registry->toolkit_listeners, list); - list = g_list_find_custom (registry->toolkit_listeners, listener, compare_corba_objects); + list = g_list_find_custom (registry->toolkit_listeners, ls, compare_listener_corbaref); } } @@ -376,13 +374,13 @@ impl_accessibility_registry_deregister_global_event_listener ( const CORBA_char * event_name, CORBA_Environment *ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); - ListenerStruct ls; + SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); + SpiListenerStruct ls; EventTypeStruct etype; GList *list; GList **listeners; - parse_event_type (&etype, event_name); + parse_event_type (&etype, (char *) event_name); switch (etype.type_cat) { case (ETYPE_OBJECT) : @@ -443,7 +441,7 @@ impl_accessibility_registry_get_desktop (PortableServer_Servant servant, const CORBA_short n, CORBA_Environment * ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); /* TODO: implement support for multiple virtual desktops */ if (n == 0) @@ -477,9 +475,10 @@ static Accessibility_DeviceEventController impl_accessibility_registry_get_device_event_controller (PortableServer_Servant servant, CORBA_Environment * ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); if (!registry->device_event_controller) - registry->device_event_controller = g_object_new (DEVICE_EVENT_CONTROLLER_TYPE, NULL); + registry->device_event_controller = spi_device_event_controller_new (registry); + return CORBA_Object_duplicate (BONOBO_OBJREF (registry->device_event_controller), ev); } @@ -488,7 +487,7 @@ impl_registry_notify_event (PortableServer_Servant servant, const Accessibility_Event *e, CORBA_Environment *ev) { - Registry *registry = REGISTRY (bonobo_object_from_servant (servant)); + SpiRegistry *registry = SPI_REGISTRY (bonobo_object_from_servant (servant)); EventTypeStruct etype; parse_event_type (&etype, e->type); @@ -506,6 +505,7 @@ impl_registry_notify_event (PortableServer_Servant servant, case (ETYPE_TOOLKIT) : _registry_notify_listeners (registry->toolkit_listeners, e, ev); break; + case (ETYPE_KEYBOARD) : default: break; } @@ -526,7 +526,7 @@ _registry_notify_listeners ( GList *listeners, { int n; int len; - ListenerStruct *ls; + SpiListenerStruct *ls; EventTypeStruct etype; guint minor_hash; parse_event_type (&etype, e->type); @@ -535,8 +535,8 @@ _registry_notify_listeners ( GList *listeners, for (n=0; nevent_type_hash, etype.hash, minor_hash); fprintf(stderr, "event name: %s\n", etype.event_name); #endif @@ -563,22 +563,22 @@ _registry_notify_listeners ( GList *listeners, static gboolean _device_event_controller_hook (gpointer p) { - Registry *registry = (Registry *)p; - DeviceEventController *controller = registry->device_event_controller; + SpiRegistry *registry = (SpiRegistry *)p; + SpiDeviceEventController *controller = registry->device_event_controller; if (controller) - device_event_controller_check_key_event (controller); + spi_device_event_controller_check_key_event (controller); return TRUE; } static void -registry_class_init (RegistryClass *klass) +spi_registry_class_init (SpiRegistryClass *klass) { GObjectClass * object_class = (GObjectClass *) klass; POA_Accessibility_Registry__epv *epv = &klass->epv; - registry_parent_class = g_type_class_ref (LISTENER_TYPE); + spi_registry_parent_class = g_type_class_ref (SPI_LISTENER_TYPE); - object_class->finalize = registry_object_finalize; + object_class->finalize = spi_registry_object_finalize; epv->registerApplication = impl_accessibility_registry_register_application; epv->deregisterApplication = impl_accessibility_registry_deregister_application; @@ -590,37 +590,37 @@ registry_class_init (RegistryClass *klass) epv->getDesktop = impl_accessibility_registry_get_desktop; epv->getDesktopList = impl_accessibility_registry_get_desktop_list; - ((ListenerClass *) klass)->epv.notifyEvent = impl_registry_notify_event; + ((SpiListenerClass *) klass)->epv.notifyEvent = impl_registry_notify_event; } static void -registry_init (Registry *registry) +spi_registry_init (SpiRegistry *registry) { registry->object_listeners = NULL; registry->window_listeners = NULL; registry->toolkit_listeners = NULL; registry->applications = NULL; - registry->desktop = desktop_new(); + registry->desktop = spi_desktop_new(); registry->device_event_controller = NULL; registry->kbd_event_hook = _device_event_controller_hook; } GType -registry_get_type (void) +spi_registry_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo tinfo = { - sizeof (RegistryClass), + sizeof (SpiRegistryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, - (GClassInitFunc) registry_class_init, + (GClassInitFunc) spi_registry_class_init, (GClassFinalizeFunc) NULL, NULL, /* class data */ - sizeof (Registry), + sizeof (SpiRegistry), 0, /* n preallocs */ - (GInstanceInitFunc) registry_init, + (GInstanceInitFunc) spi_registry_init, NULL /* value table */ }; /* @@ -633,18 +633,18 @@ registry_get_type (void) PARENT_TYPE, POA_Accessibility_Registry__init, NULL, - G_STRUCT_OFFSET (RegistryClass, epv), + G_STRUCT_OFFSET (SpiRegistryClass, epv), &tinfo, - "Registry"); + "SpiRegistry"); } return type; } -Registry * -registry_new (void) +SpiRegistry * +spi_registry_new (void) { - Registry *retval = - REGISTRY (g_object_new (registry_get_type (), NULL)); + SpiRegistry *retval = + SPI_REGISTRY (g_object_new (spi_registry_get_type (), NULL)); return retval; }