From 2ed7c634ca93703fdaf01187317a5ab504f0c6c8 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Mon, 7 May 2001 22:13:14 +0000 Subject: Convert to bonobo xobject 2001-05-07 JP Rosevear * pcs/cal-factory.[hc]: Convert to bonobo xobject * pcs/cal.[hc]: Convert to bonobo xobject svn path=/trunk/; revision=9703 --- calendar/pcs/cal-factory.c | 317 ++++++++++++--------------------------------- 1 file changed, 85 insertions(+), 232 deletions(-) (limited to 'calendar/pcs/cal-factory.c') 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: -- cgit v1.2.3