-/*
- * CORBA Accessibility::Registry::registerGlobalEventListener method implementation
- */
-static void
-impl_accessibility_registry_register_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));
- ListenerStruct *ls = g_malloc (sizeof (ListenerStruct));
- EventTypeStruct etype;
-
- 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);
- ls->event_type_hash = etype.hash;
- ls->event_type_cat = etype.type_cat;
-
- switch (etype.type_cat)
- {
- case (ETYPE_FOCUS) :
- ls->listener = CORBA_Object_duplicate (listener, ev);
- registry->focus_listeners =
- g_list_append (registry->focus_listeners, ls);
- break;
- case (ETYPE_WINDOW) :
- /* Support for Window Manager Events is not yet implemented */
- break;
- case (ETYPE_TOOLKIT) :
- ls->listener = CORBA_Object_duplicate (listener, ev);
- registry->toolkit_listeners =
- g_list_append (registry->toolkit_listeners, ls);
- register_with_toolkits (registry, &etype, ev);
- break;
- default:
- break;
- }
-}
-
-/*
- * 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);
-
- /*
- * TODO : de-register with toolkit if the last instance of a listener
- * to a particular toolkit event type has been deregistered.
- */
-
- 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);
- }
- list = g_list_find_custom (registry->toolkit_listeners, listener, compare_object_hash);
- 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_object_hash);
- }
-}
-
-/*
- * CORBA Accessibility::Registry::deregisterGlobalEventListener method implementation
- */
-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));
- ListenerStruct ls;
- EventTypeStruct etype;
- GList *list;
- GList **listeners;
-
- parse_event_type (&etype, event_name);
- switch (etype.type_cat)
- {
- case (ETYPE_FOCUS) :
- listeners = ®istry->focus_listeners;
- break;
- case (ETYPE_WINDOW) :
- /* Support for Window Manager Events is not yet implemented */
- break;
- case (ETYPE_TOOLKIT) :
- listeners = ®istry->toolkit_listeners;
- break;
- default:
- break;
- }
-
- ls.event_type_hash = etype.hash;
- list = g_list_find_custom (*listeners, &ls, compare_listener_hash);
-
- while (list)
- {
- fprintf (stderr, "deregistering listener\n");
- *listeners = g_list_delete_link (*listeners, list);
- list = g_list_find_custom (*listeners, &ls, compare_listener_hash);
- }
-}
-
-