diff options
Diffstat (limited to 'calendar/pcs')
-rw-r--r-- | calendar/pcs/cal-factory.c | 317 | ||||
-rw-r--r-- | calendar/pcs/cal-factory.h | 34 | ||||
-rw-r--r-- | calendar/pcs/cal.c | 350 | ||||
-rw-r--r-- | calendar/pcs/cal.h | 12 |
4 files changed, 218 insertions, 495 deletions
diff --git a/calendar/pcs/cal-factory.c b/calendar/pcs/cal-factory.c index d0bbd278d1..2abbd0b6d1 100644 --- a/calendar/pcs/cal-factory.c +++ b/calendar/pcs/cal-factory.c @@ -30,11 +30,11 @@ #include "cal-factory.h" #include "job.h" - - -/* OAF ID for registration */ +#define PARENT_TYPE BONOBO_X_OBJECT_TYPE #define CAL_FACTORY_OAF_ID "OAFIID:GNOME_Evolution_Wombat_CalendarFactory" +static BonoboXObjectClass *parent_class; + /* Private part of the CalFactory structure */ struct _CalFactoryPrivate { /* Hash table from URI method strings to GtkType * for backend class types */ @@ -47,104 +47,13 @@ struct _CalFactoryPrivate { guint registered : 1; }; - - /* Signal IDs */ -enum { +enum SIGNALS { LAST_CALENDAR_GONE, LAST_SIGNAL }; -static void cal_factory_class_init (CalFactoryClass *class); -static void cal_factory_init (CalFactory *factory); -static void cal_factory_destroy (GtkObject *object); - -static POA_GNOME_Evolution_Calendar_CalFactory__vepv cal_factory_vepv; - -static BonoboObjectClass *parent_class; - -static guint cal_factory_signals[LAST_SIGNAL]; - - - -/** - * cal_factory_get_type: - * @void: - * - * Registers the #CalFactory class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalFactory class. - **/ -GtkType -cal_factory_get_type (void) -{ - static GtkType cal_factory_type = 0; - - if (!cal_factory_type) { - static const GtkTypeInfo cal_factory_info = { - "CalFactory", - sizeof (CalFactory), - sizeof (CalFactoryClass), - (GtkClassInitFunc) cal_factory_class_init, - (GtkObjectInitFunc) cal_factory_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_factory_type = gtk_type_unique (bonobo_object_get_type (), &cal_factory_info); - } - - return cal_factory_type; -} - -/* CORBA class initialization function for the calendar factory */ -static void -init_cal_factory_corba_class (void) -{ - cal_factory_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - cal_factory_vepv.GNOME_Evolution_Calendar_CalFactory_epv = cal_factory_get_epv (); -} - -/* Class initialization function for the calendar factory */ -static void -cal_factory_class_init (CalFactoryClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (bonobo_object_get_type ()); - - cal_factory_signals[LAST_CALENDAR_GONE] = - gtk_signal_new ("last_calendar_gone", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalFactoryClass, last_calendar_gone), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, cal_factory_signals, LAST_SIGNAL); - - object_class->destroy = cal_factory_destroy; - - init_cal_factory_corba_class (); -} - -/* Object initialization function for the calendar factory */ -static void -cal_factory_init (CalFactory *factory) -{ - CalFactoryPrivate *priv; - - priv = g_new0 (CalFactoryPrivate, 1); - factory->priv = priv; - - priv->methods = g_hash_table_new (g_str_hash, g_str_equal); - priv->backends = g_hash_table_new (gnome_vfs_uri_hash, gnome_vfs_uri_hequal); - priv->registered = FALSE; -} +static guint signals[LAST_SIGNAL]; /* Frees a method/GtkType * pair from the methods hash table */ static void @@ -174,46 +83,6 @@ free_backend (gpointer key, gpointer value, gpointer data) gtk_object_unref (GTK_OBJECT (backend)); } -/* Destroy handler for the calendar */ -static void -cal_factory_destroy (GtkObject *object) -{ - CalFactory *factory; - CalFactoryPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_FACTORY (object)); - - factory = CAL_FACTORY (object); - priv = factory->priv; - - g_hash_table_foreach (priv->methods, free_method, NULL); - g_hash_table_destroy (priv->methods); - priv->methods = NULL; - - /* Should we assert that there are no more backends? */ - - g_hash_table_foreach (priv->backends, free_backend, NULL); - g_hash_table_destroy (priv->backends); - priv->backends = NULL; - - if (priv->registered) { - CORBA_Object obj; - - obj = bonobo_object_corba_objref (BONOBO_OBJECT (factory)); - oaf_active_server_unregister (CAL_FACTORY_OAF_ID, obj); - priv->registered = FALSE; - } - - g_free (priv); - factory->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - /* Opening calendars */ /* Looks up a calendar backend in a factory's hash table of uri->cal */ @@ -263,7 +132,7 @@ backend_last_client_gone_cb (CalBackend *backend, gpointer data) /* Notify upstream if there are no more backends */ if (g_hash_table_size (priv->backends) == 0) - gtk_signal_emit (GTK_OBJECT (factory), cal_factory_signals[LAST_CALENDAR_GONE]); + gtk_signal_emit (GTK_OBJECT (factory), signals[LAST_CALENDAR_GONE]); } /* Adds a backend to the calendar factory's hash table */ @@ -418,7 +287,7 @@ add_calendar_client (CalFactory *factory, CalBackend *backend, GNOME_Evolution_C GNOME_Evolution_Calendar_Listener_notifyCalOpened ( listener, GNOME_Evolution_Calendar_Listener_SUCCESS, - bonobo_object_corba_objref (BONOBO_OBJECT (cal)), + BONOBO_OBJREF (cal), &ev); if (ev._major != CORBA_NO_EXCEPTION) { @@ -502,15 +371,12 @@ open_fn (gpointer data) -/* CORBA servant implementation */ - -/* CalFactory::open method */ static void -CalFactory_open (PortableServer_Servant servant, - const CORBA_char *uri, - CORBA_boolean only_if_exists, - GNOME_Evolution_Calendar_Listener listener, - CORBA_Environment *ev) +impl_CalFactory_open (PortableServer_Servant servant, + const CORBA_char *uri, + CORBA_boolean only_if_exists, + GNOME_Evolution_Calendar_Listener listener, + CORBA_Environment *ev) { CalFactory *factory; CalFactoryPrivate *priv; @@ -558,118 +424,107 @@ CalFactory_open (PortableServer_Servant servant, job_add (open_fn, jd); } -/** - * cal_factory_get_epv: - * @void: - * - * Creates an EPV for the CalFactory CORBA class. - * - * Return value: A newly-allocated EPV. - **/ -POA_GNOME_Evolution_Calendar_CalFactory__epv * -cal_factory_get_epv (void) -{ - POA_GNOME_Evolution_Calendar_CalFactory__epv *epv; - - epv = g_new0 (POA_GNOME_Evolution_Calendar_CalFactory__epv, 1); - epv->open = CalFactory_open; - - return epv; -} - /** - * cal_factory_construct: - * @factory: A calendar factory. - * @corba_factory: CORBA object for the calendar factory. + * cal_factory_new: + * @void: * - * Constructs a calendar factory by binding the corresponding CORBA object to - * it. + * Creates a new #CalFactory object. * - * Return value: The same object as the @factory argument. + * Return value: A newly-created #CalFactory, or NULL if its corresponding CORBA + * object could not be created. **/ CalFactory * -cal_factory_construct (CalFactory *factory, GNOME_Evolution_Calendar_CalFactory corba_factory) +cal_factory_new (void) { - g_return_val_if_fail (factory != NULL, NULL); - g_return_val_if_fail (IS_CAL_FACTORY (factory), NULL); + CalFactory *factory; + + factory = gtk_type_new (CAL_FACTORY_TYPE); - bonobo_object_construct (BONOBO_OBJECT (factory), corba_factory); return factory; } -/** - * cal_factory_corba_object_create: - * @object: #BonoboObject that will wrap the CORBA object. - * - * Creates and activates the CORBA object that is wrapped by the specified - * calendar factory @object. - * - * Return value: An activated object reference or #CORBA_OBJECT_NIL in case of - * failure. - **/ -GNOME_Evolution_Calendar_CalFactory -cal_factory_corba_object_create (BonoboObject *object) +/* Destroy handler for the calendar */ +static void +cal_factory_destroy (GtkObject *object) { - POA_GNOME_Evolution_Calendar_CalFactory *servant; - CORBA_Environment ev; + CalFactory *factory; + CalFactoryPrivate *priv; - g_return_val_if_fail (object != NULL, CORBA_OBJECT_NIL); - g_return_val_if_fail (IS_CAL_FACTORY (object), CORBA_OBJECT_NIL); + g_return_if_fail (object != NULL); + g_return_if_fail (IS_CAL_FACTORY (object)); - servant = (POA_GNOME_Evolution_Calendar_CalFactory *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &cal_factory_vepv; + factory = CAL_FACTORY (object); + priv = factory->priv; - CORBA_exception_init (&ev); - POA_GNOME_Evolution_Calendar_CalFactory__init ((PortableServer_Servant) servant, &ev); + g_hash_table_foreach (priv->methods, free_method, NULL); + g_hash_table_destroy (priv->methods); + priv->methods = NULL; - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_factory_corba_object_create(): could not init the servant"); - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; + /* Should we assert that there are no more backends? */ + + g_hash_table_foreach (priv->backends, free_backend, NULL); + g_hash_table_destroy (priv->backends); + priv->backends = NULL; + + if (priv->registered) { + oaf_active_server_unregister (CAL_FACTORY_OAF_ID, BONOBO_OBJREF (factory)); + priv->registered = FALSE; } - CORBA_exception_free (&ev); - return (GNOME_Evolution_Calendar_CalFactory) bonobo_object_activate_servant (object, servant); + g_free (priv); + factory->priv = NULL; + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); } -/** - * cal_factory_new: - * @void: - * - * Creates a new #CalFactory object. - * - * Return value: A newly-created #CalFactory, or NULL if its corresponding CORBA - * object could not be created. - **/ -CalFactory * -cal_factory_new (void) +/* Class initialization function for the calendar factory */ +static void +cal_factory_class_init (CalFactoryClass *klass) { - CalFactory *factory; - CORBA_Environment ev; - GNOME_Evolution_Calendar_CalFactory corba_factory; - gboolean retval; + GtkObjectClass *object_class = (GtkObjectClass *) klass; + POA_GNOME_Evolution_Calendar_CalFactory__epv *epv = &klass->epv; - factory = gtk_type_new (CAL_FACTORY_TYPE); + parent_class = gtk_type_class (bonobo_object_get_type ()); + + signals[LAST_CALENDAR_GONE] = + gtk_signal_new ("last_calendar_gone", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (CalFactoryClass, last_calendar_gone), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); - corba_factory = cal_factory_corba_object_create (BONOBO_OBJECT (factory)); + gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); - CORBA_exception_init (&ev); - retval = CORBA_Object_is_nil (corba_factory, &ev); + /* Class method overrides */ + object_class->destroy = cal_factory_destroy; - if (ev._major != CORBA_NO_EXCEPTION || retval) { - g_message ("cal_factory_new(): could not create the CORBA factory"); - bonobo_object_unref (BONOBO_OBJECT (factory)); - CORBA_exception_free (&ev); - return NULL; - } - CORBA_exception_free (&ev); + /* Epv methods */ + epv->open = impl_CalFactory_open; +} + +/* Object initialization function for the calendar factory */ +static void +cal_factory_init (CalFactory *factory) +{ + CalFactoryPrivate *priv; + + priv = g_new0 (CalFactoryPrivate, 1); + factory->priv = priv; - return cal_factory_construct (factory, corba_factory); + priv->methods = g_hash_table_new (g_str_hash, g_str_equal); + priv->backends = g_hash_table_new (gnome_vfs_uri_hash, gnome_vfs_uri_hequal); + priv->registered = FALSE; } +BONOBO_X_TYPE_FUNC_FULL (CalFactory, + GNOME_Evolution_Calendar_CalFactory, + PARENT_TYPE, + cal_factory); + /* Returns the lowercase version of a string */ static char * str_tolower (const char *s) @@ -699,7 +554,6 @@ cal_factory_oaf_register (CalFactory *factory) { CalFactoryPrivate *priv; OAF_RegistrationResult result; - CORBA_Object obj; g_return_val_if_fail (factory != NULL, FALSE); g_return_val_if_fail (IS_CAL_FACTORY (factory), FALSE); @@ -708,8 +562,7 @@ cal_factory_oaf_register (CalFactory *factory) g_return_val_if_fail (!priv->registered, FALSE); - obj = bonobo_object_corba_objref (BONOBO_OBJECT (factory)); - result = oaf_active_server_register (CAL_FACTORY_OAF_ID, obj); + result = oaf_active_server_register (CAL_FACTORY_OAF_ID, BONOBO_OBJREF (factory)); switch (result) { case OAF_REG_SUCCESS: diff --git a/calendar/pcs/cal-factory.h b/calendar/pcs/cal-factory.h index ac28a5935b..008fc2c36d 100644 --- a/calendar/pcs/cal-factory.h +++ b/calendar/pcs/cal-factory.h @@ -1,6 +1,5 @@ /* Evolution calendar factory * - * Copyright (C) 2000 Helix Code, Inc. * Copyright (C) 2000 Ximian, Inc. * * Author: Federico Mena-Quintero <federico@ximian.com> @@ -24,9 +23,9 @@ #define CAL_FACTORY_H #include <libgnome/gnome-defs.h> -#include <bonobo/bonobo-object.h> +#include <bonobo/bonobo-xobject.h> -#include "calendar/pcs/evolution-calendar.h" +#include "evolution-calendar.h" BEGIN_GNOME_DECLS @@ -45,36 +44,29 @@ typedef struct _CalFactoryClass CalFactoryClass; typedef struct _CalFactoryPrivate CalFactoryPrivate; struct _CalFactory { - BonoboObject object; + BonoboXObject object; /* Private data */ CalFactoryPrivate *priv; }; struct _CalFactoryClass { - BonoboObjectClass parent_class; + BonoboXObjectClass parent_class; + + POA_GNOME_Evolution_Calendar_CalFactory__epv epv; /* Notification signals */ void (* last_calendar_gone) (CalFactory *factory); }; -GtkType cal_factory_get_type (void); +GtkType cal_factory_get_type (void); +CalFactory *cal_factory_new (void); -CalFactory *cal_factory_construct (CalFactory *factory, - GNOME_Evolution_Calendar_CalFactory corba_factory); -GNOME_Evolution_Calendar_CalFactory cal_factory_corba_object_create (BonoboObject *object); - -CalFactory *cal_factory_new (void); - -gboolean cal_factory_oaf_register (CalFactory *factory); - -void cal_factory_register_method (CalFactory *factory, const char *method, GtkType backend_type); - -int cal_factory_get_n_backends (CalFactory *factory); - -POA_GNOME_Evolution_Calendar_CalFactory__epv *cal_factory_get_epv (void); - - +gboolean cal_factory_oaf_register (CalFactory *factory); +void cal_factory_register_method (CalFactory *factory, + const char *method, + GtkType backend_type); +int cal_factory_get_n_backends (CalFactory *factory); END_GNOME_DECLS diff --git a/calendar/pcs/cal.c b/calendar/pcs/cal.c index e723c077cb..6eb951133b 100644 --- a/calendar/pcs/cal.c +++ b/calendar/pcs/cal.c @@ -24,7 +24,9 @@ #include "cal.h" #include "query.h" - +#define PARENT_TYPE BONOBO_X_OBJECT_TYPE + +static BonoboXObjectClass *parent_class; /* Private part of the Cal structure */ struct _CalPrivate { @@ -35,121 +37,10 @@ struct _CalPrivate { GNOME_Evolution_Calendar_Listener listener; }; - - -static void cal_class_init (CalClass *class); -static void cal_init (Cal *cal); -static void cal_destroy (GtkObject *object); - -static POA_GNOME_Evolution_Calendar_Cal__vepv cal_vepv; - -static BonoboObjectClass *parent_class; - - - -/** - * cal_get_type: - * @void: - * - * Registers the #Cal class if necessary, and returns the type ID associated to - * it. - * - * Return value: The type ID of the #Cal class. - **/ -GtkType -cal_get_type (void) -{ - static GtkType cal_type = 0; - - if (!cal_type) { - static const GtkTypeInfo cal_info = { - "Cal", - sizeof (Cal), - sizeof (CalClass), - (GtkClassInitFunc) cal_class_init, - (GtkObjectInitFunc) cal_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_type = gtk_type_unique (BONOBO_OBJECT_TYPE, &cal_info); - } - - return cal_type; -} - -/* CORBA class initialzation function for the calendar */ -static void -init_cal_corba_class (void) -{ - cal_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - cal_vepv.GNOME_Evolution_Calendar_Cal_epv = cal_get_epv (); -} - -/* Class initialization function for the calendar */ -static void -cal_class_init (CalClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (BONOBO_OBJECT_TYPE); - - object_class->destroy = cal_destroy; - - init_cal_corba_class (); -} - -/* Object initialization function for the calendar */ -static void -cal_init (Cal *cal) -{ - CalPrivate *priv; - - priv = g_new0 (CalPrivate, 1); - cal->priv = priv; - - priv->listener = CORBA_OBJECT_NIL; -} - -/* Destroy handler for the calendar */ -static void -cal_destroy (GtkObject *object) -{ - Cal *cal; - CalPrivate *priv; - CORBA_Environment ev; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL (object)); - - cal = CAL (object); - priv = cal->priv; - - priv->backend = NULL; - - CORBA_exception_init (&ev); - CORBA_Object_release (priv->listener, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("cal_destroy(): could not release the listener"); - - CORBA_exception_free (&ev); - - g_free (priv); - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* CORBA servant implementation */ /* Cal::get_uri method */ static CORBA_char * -Cal_get_uri (PortableServer_Servant servant, +impl_Cal_get_uri (PortableServer_Servant servant, CORBA_Environment *ev) { Cal *cal; @@ -182,9 +73,9 @@ uncorba_obj_type (GNOME_Evolution_Calendar_CalObjType type) /* Cal::get_n_objects method */ static CORBA_long -Cal_get_n_objects (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CalObjType type, - CORBA_Environment *ev) +impl_Cal_get_n_objects (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjType type, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -201,9 +92,9 @@ Cal_get_n_objects (PortableServer_Servant servant, /* Cal::get_object method */ static GNOME_Evolution_Calendar_CalObj -Cal_get_object (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CalObjUID uid, - CORBA_Environment *ev) +impl_Cal_get_object (PortableServer_Servant servant, + const GNOME_Evolution_Calendar_CalObjUID uid, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -256,9 +147,9 @@ build_uid_seq (GList *uids) /* Cal::get_uids method */ static GNOME_Evolution_Calendar_CalObjUIDSeq * -Cal_get_uids (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CalObjType type, - CORBA_Environment *ev) +impl_Cal_get_uids (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjType type, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -281,10 +172,10 @@ Cal_get_uids (PortableServer_Servant servant, /* Cal::get_changes method */ static GNOME_Evolution_Calendar_CalObjChangeSeq * -Cal_get_changes (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CalObjType type, - const CORBA_char *change_id, - CORBA_Environment *ev) +impl_Cal_get_changes (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjType type, + const CORBA_char *change_id, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -300,11 +191,11 @@ Cal_get_changes (PortableServer_Servant servant, /* Cal::get_objects_in_range method */ static GNOME_Evolution_Calendar_CalObjUIDSeq * -Cal_get_objects_in_range (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CalObjType type, - GNOME_Evolution_Calendar_Time_t start, - GNOME_Evolution_Calendar_Time_t end, - CORBA_Environment *ev) +impl_Cal_get_objects_in_range (PortableServer_Servant servant, + GNOME_Evolution_Calendar_CalObjType type, + GNOME_Evolution_Calendar_Time_t start, + GNOME_Evolution_Calendar_Time_t end, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -337,10 +228,10 @@ Cal_get_objects_in_range (PortableServer_Servant servant, /* Cal::get_alarms_in_range method */ static GNOME_Evolution_Calendar_CalComponentAlarmsSeq * -Cal_get_alarms_in_range (PortableServer_Servant servant, - GNOME_Evolution_Calendar_Time_t start, - GNOME_Evolution_Calendar_Time_t end, - CORBA_Environment *ev) +impl_Cal_get_alarms_in_range (PortableServer_Servant servant, + GNOME_Evolution_Calendar_Time_t start, + GNOME_Evolution_Calendar_Time_t end, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -367,11 +258,11 @@ Cal_get_alarms_in_range (PortableServer_Servant servant, /* Cal::get_alarms_for_object method */ static GNOME_Evolution_Calendar_CalComponentAlarms * -Cal_get_alarms_for_object (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CalObjUID uid, - GNOME_Evolution_Calendar_Time_t start, - GNOME_Evolution_Calendar_Time_t end, - CORBA_Environment * ev) +impl_Cal_get_alarms_for_object (PortableServer_Servant servant, + const GNOME_Evolution_Calendar_CalObjUID uid, + GNOME_Evolution_Calendar_Time_t start, + GNOME_Evolution_Calendar_Time_t end, + CORBA_Environment * ev) { Cal *cal; CalPrivate *priv; @@ -411,10 +302,10 @@ Cal_get_alarms_for_object (PortableServer_Servant servant, /* Cal::update_object method */ static void -Cal_update_object (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CalObjUID uid, - const GNOME_Evolution_Calendar_CalObj calobj, - CORBA_Environment *ev) +impl_Cal_update_object (PortableServer_Servant servant, + const GNOME_Evolution_Calendar_CalObjUID uid, + const GNOME_Evolution_Calendar_CalObj calobj, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -430,9 +321,9 @@ Cal_update_object (PortableServer_Servant servant, /* Cal::remove_object method */ static void -Cal_remove_object (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CalObjUID uid, - CORBA_Environment *ev) +impl_Cal_remove_object (PortableServer_Servant servant, + const GNOME_Evolution_Calendar_CalObjUID uid, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -448,10 +339,10 @@ Cal_remove_object (PortableServer_Servant servant, /* Cal::getQuery implementation */ static GNOME_Evolution_Calendar_Query -Cal_get_query (PortableServer_Servant servant, - const CORBA_char *sexp, - GNOME_Evolution_Calendar_QueryListener ql, - CORBA_Environment *ev) +impl_Cal_get_query (PortableServer_Servant servant, + const CORBA_char *sexp, + GNOME_Evolution_Calendar_QueryListener ql, + CORBA_Environment *ev) { Cal *cal; CalPrivate *priv; @@ -487,37 +378,6 @@ Cal_get_query (PortableServer_Servant servant, } /** - * cal_get_epv: - * @void: - * - * Creates an EPV for the Cal CORBA class. - * - * Return value: A newly-allocated EPV. - **/ -POA_GNOME_Evolution_Calendar_Cal__epv * -cal_get_epv (void) -{ - POA_GNOME_Evolution_Calendar_Cal__epv *epv; - - epv = g_new0 (POA_GNOME_Evolution_Calendar_Cal__epv, 1); - epv->_get_uri = Cal_get_uri; - epv->countObjects = Cal_get_n_objects; - epv->getObject = Cal_get_object; - epv->getUIDs = Cal_get_uids; - epv->getChanges = Cal_get_changes; - epv->getObjectsInRange = Cal_get_objects_in_range; - epv->getAlarmsInRange = Cal_get_alarms_in_range; - epv->getAlarmsForObject = Cal_get_alarms_for_object; - epv->updateObject = Cal_update_object; - epv->removeObject = Cal_remove_object; - epv->getQuery = Cal_get_query; - - return epv; -} - - - -/** * cal_construct: * @cal: A calendar client interface. * @corba_cal: CORBA object for the calendar. @@ -532,7 +392,6 @@ cal_get_epv (void) **/ Cal * cal_construct (Cal *cal, - GNOME_Evolution_Calendar_Cal corba_cal, CalBackend *backend, GNOME_Evolution_Calendar_Listener listener) { @@ -559,46 +418,10 @@ cal_construct (Cal *cal, priv->backend = backend; - bonobo_object_construct (BONOBO_OBJECT (cal), corba_cal); return cal; } /** - * cal_corba_object_create: - * @object: #BonoboObject that will wrap the CORBA object. - * - * Creates and activates the CORBA object that is wrapped by the specified - * calendar client interface @object. - * - * Return value: An activated object reference or #CORBA_OBJECT_NIL in case of - * failure. - **/ -GNOME_Evolution_Calendar_Cal -cal_corba_object_create (BonoboObject *object) -{ - POA_GNOME_Evolution_Calendar_Cal *servant; - CORBA_Environment ev; - - g_return_val_if_fail (object != NULL, CORBA_OBJECT_NIL); - g_return_val_if_fail (IS_CAL (object), CORBA_OBJECT_NIL); - - servant = (POA_GNOME_Evolution_Calendar_Cal *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &cal_vepv; - - CORBA_exception_init (&ev); - POA_GNOME_Evolution_Calendar_Cal__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_corba_object_create(): could not init the servant"); - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; - } - - CORBA_exception_free (&ev); - return (GNOME_Evolution_Calendar_Cal) bonobo_object_activate_servant (object, servant); -} - -/** * cal_new: * @backend: A calendar backend. * @listener: A calendar listener. @@ -613,28 +436,13 @@ Cal * cal_new (CalBackend *backend, GNOME_Evolution_Calendar_Listener listener) { Cal *cal, *retval; - GNOME_Evolution_Calendar_Cal corba_cal; - CORBA_Environment ev; - gboolean ret; g_return_val_if_fail (backend != NULL, NULL); g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); cal = CAL (gtk_type_new (CAL_TYPE)); - corba_cal = cal_corba_object_create (BONOBO_OBJECT (cal)); - CORBA_exception_init (&ev); - ret = CORBA_Object_is_nil ((CORBA_Object) corba_cal, &ev); - if (ev._major != CORBA_NO_EXCEPTION || ret) { - g_message ("cal_new(): could not create the CORBA object"); - bonobo_object_unref (BONOBO_OBJECT (cal)); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - retval = cal_construct (cal, corba_cal, backend, listener); + retval = cal_construct (cal, backend, listener); if (!retval) { g_message ("cal_new(): could not construct the calendar client interface"); bonobo_object_unref (BONOBO_OBJECT (cal)); @@ -644,6 +452,78 @@ cal_new (CalBackend *backend, GNOME_Evolution_Calendar_Listener listener) return retval; } +/* Destroy handler for the calendar */ +static void +cal_destroy (GtkObject *object) +{ + Cal *cal; + CalPrivate *priv; + CORBA_Environment ev; + + g_return_if_fail (object != NULL); + g_return_if_fail (IS_CAL (object)); + + cal = CAL (object); + priv = cal->priv; + + priv->backend = NULL; + + CORBA_exception_init (&ev); + CORBA_Object_release (priv->listener, &ev); + if (ev._major != CORBA_NO_EXCEPTION) + g_message ("cal_destroy(): could not release the listener"); + + CORBA_exception_free (&ev); + + g_free (priv); + + if (GTK_OBJECT_CLASS (parent_class)->destroy) + (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); +} + + + +/* Class initialization function for the calendar */ +static void +cal_class_init (CalClass *klass) +{ + GtkObjectClass *object_class = (GtkObjectClass *) klass; + POA_GNOME_Evolution_Calendar_Cal__epv *epv = &klass->epv; + + parent_class = gtk_type_class (BONOBO_OBJECT_TYPE); + + /* Class method overrides */ + object_class->destroy = cal_destroy; + + /* Epv methods */ + epv->_get_uri = impl_Cal_get_uri; + epv->countObjects = impl_Cal_get_n_objects; + epv->getObject = impl_Cal_get_object; + epv->getUIDs = impl_Cal_get_uids; + epv->getChanges = impl_Cal_get_changes; + epv->getObjectsInRange = impl_Cal_get_objects_in_range; + epv->getAlarmsInRange = impl_Cal_get_alarms_in_range; + epv->getAlarmsForObject = impl_Cal_get_alarms_for_object; + epv->updateObject = impl_Cal_update_object; + epv->removeObject = impl_Cal_remove_object; + epv->getQuery = impl_Cal_get_query; +} + + +/* Object initialization function for the calendar */ +static void +cal_init (Cal *cal) +{ + CalPrivate *priv; + + priv = g_new0 (CalPrivate, 1); + cal->priv = priv; + + priv->listener = CORBA_OBJECT_NIL; +} + +BONOBO_X_TYPE_FUNC_FULL (Cal, GNOME_Evolution_Calendar_Cal, PARENT_TYPE, cal); + /** * cal_notify_update: * @cal: A calendar client interface. diff --git a/calendar/pcs/cal.h b/calendar/pcs/cal.h index 844640cd8d..f9880178b5 100644 --- a/calendar/pcs/cal.h +++ b/calendar/pcs/cal.h @@ -24,7 +24,7 @@ #define CAL_H #include <libgnome/gnome-defs.h> -#include <bonobo/bonobo-object.h> +#include <bonobo/bonobo-xobject.h> #include "calendar/pcs/evolution-calendar.h" #include "cal-common.h" @@ -41,31 +41,29 @@ BEGIN_GNOME_DECLS typedef struct _CalPrivate CalPrivate; struct _Cal { - BonoboObject object; + BonoboXObject object; /* Private data */ CalPrivate *priv; }; struct _CalClass { - BonoboObjectClass parent_class; + BonoboXObjectClass parent_class; + + POA_GNOME_Evolution_Calendar_Cal__epv epv; }; GtkType cal_get_type (void); Cal *cal_construct (Cal *cal, - GNOME_Evolution_Calendar_Cal corba_cal, CalBackend *backend, GNOME_Evolution_Calendar_Listener listener); -GNOME_Evolution_Calendar_Cal cal_corba_object_create (BonoboObject *object); Cal *cal_new (CalBackend *backend, GNOME_Evolution_Calendar_Listener listener); void cal_notify_update (Cal *cal, const char *uid); void cal_notify_remove (Cal *cal, const char *uid); -POA_GNOME_Evolution_Calendar_Cal__epv *cal_get_epv (void); - END_GNOME_DECLS |