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);
}
Example #3
0
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);
}