static void impl_MateComponent_EventSource_removeListener (PortableServer_Servant servant, const MateComponent_Listener listener, CORBA_Environment *ev) { GSList *l, *next; MateComponentEventSourcePrivate *priv; priv = matecomponent_event_source_from_servant (servant)->priv; for (l = priv->listeners; l; l = next) { ListenerDesc *desc = l->data; next = l->next; if (CORBA_Object_is_equivalent (listener, desc->listener, ev)) { priv->listeners = g_slist_remove_link ( priv->listeners, l); g_slist_free_1 (l); desc_free (desc, ev); return; } } CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_MateComponent_EventSource_UnknownListener, NULL); }
static void matecomponent_event_source_destroy (MateComponentObject *object) { CORBA_Environment ev; MateComponentEventSourcePrivate *priv = MATECOMPONENT_EVENT_SOURCE (object)->priv; CORBA_exception_init (&ev); while (priv->listeners) { ListenerDesc *d = priv->listeners->data; priv->listeners = g_slist_remove (priv->listeners, d); desc_free (d, &ev); } CORBA_exception_free (&ev); ((MateComponentObjectClass *)matecomponent_event_source_parent_class)->destroy (object); }
static void bonobo_event_source_destroy (BonoboObject *object) { CORBA_Environment ev; BonoboEventSourcePrivate *priv = BONOBO_EVENT_SOURCE (object)->priv; CORBA_exception_init (&ev); while (priv->listeners) { ListenerDesc *d = priv->listeners->data; priv->listeners = g_slist_remove (priv->listeners, d); desc_free (d, &ev); } CORBA_exception_free (&ev); ((BonoboObjectClass *)bonobo_event_source_parent_class)->destroy (object); }