aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/pcs/cal-factory.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/pcs/cal-factory.c')
-rw-r--r--calendar/pcs/cal-factory.c317
1 files changed, 85 insertions, 232 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: