aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend/pas/pas-card-cursor.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/backend/pas/pas-card-cursor.c')
-rw-r--r--addressbook/backend/pas/pas-card-cursor.c192
1 files changed, 95 insertions, 97 deletions
diff --git a/addressbook/backend/pas/pas-card-cursor.c b/addressbook/backend/pas/pas-card-cursor.c
index 572f63f46e..68230eca52 100644
--- a/addressbook/backend/pas/pas-card-cursor.c
+++ b/addressbook/backend/pas/pas-card-cursor.c
@@ -7,10 +7,13 @@
*/
#include <config.h>
+#include <bonobo/bonobo-main.h>
#include "addressbook.h"
#include "pas-card-cursor.h"
struct _PASCardCursorPrivate {
+ PASCardCursorServant *servant;
+ GNOME_Evolution_Addressbook_CardCursor corba_cursor;
long (*get_length) (PASCardCursor *cursor, gpointer data);
char * (*get_nth) (PASCardCursor *cursor, long n, gpointer data);
gpointer data;
@@ -24,20 +27,20 @@ static BonoboObjectClass *parent_class;
/*
* The VEPV for the CardCursor object
*/
-static POA_GNOME_Evolution_Addressbook_CardCursor__vepv cursor_vepv;
+static POA_GNOME_Evolution_Addressbook_CardCursor__vepv pas_card_cursor_vepv;
/*
- * Implemented GtkObject::destroy
+ * Implemented GObject::dispose
*/
static void
-pas_card_cursor_destroy (GtkObject *object)
+pas_card_cursor_dispose (GObject *object)
{
PASCardCursor *cursor = PAS_CARD_CURSOR (object);
if ( cursor->priv )
g_free ( cursor->priv );
- GTK_OBJECT_CLASS (parent_class)->destroy (object);
+ G_OBJECT_CLASS (parent_class)->dispose (object);
}
/*
@@ -72,134 +75,128 @@ impl_pas_card_cursor_get_nth (PortableServer_Servant servant,
return CORBA_string_dup ("");
}
-/*
- * If you want users to derive classes from your implementation
- * you need to support this method.
- */
-POA_GNOME_Evolution_Addressbook_CardCursor__epv *
-pas_card_cursor_get_epv (void)
+
+static void
+corba_class_init (PASCardCursorClass *klass)
{
+ POA_GNOME_Evolution_Addressbook_CardCursor__vepv *vepv;
POA_GNOME_Evolution_Addressbook_CardCursor__epv *epv;
+ PortableServer_ServantBase__epv *base_epv;
+
+ base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
+ base_epv->_private = NULL;
+ base_epv->finalize = NULL;
+ base_epv->default_POA = NULL;
- epv = g_new0 (POA_GNOME_Evolution_Addressbook_CardCursor__epv, 1);
+ epv = &klass->epv;
- /*
- * This is the method invoked by CORBA
- */
epv->count = impl_pas_card_cursor_get_length;
epv->getNth = impl_pas_card_cursor_get_nth;
- return epv;
-}
-
-static void
-init_pas_card_cursor_corba_class (void)
-{
- cursor_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv ();
- cursor_vepv.GNOME_Evolution_Addressbook_CardCursor_epv = pas_card_cursor_get_epv ();
+ vepv = &pas_card_cursor_vepv;
+ vepv->_base_epv = base_epv;
+ vepv->GNOME_Evolution_Addressbook_CardCursor_epv = epv;
}
static void
pas_card_cursor_class_init (PASCardCursorClass *klass)
{
- GtkObjectClass *object_class = (GtkObjectClass *) klass;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
- parent_class = gtk_type_class (bonobo_object_get_type ());
+ parent_class = g_type_class_ref (BONOBO_TYPE_OBJECT);
- object_class->destroy = pas_card_cursor_destroy;
+ object_class->dispose = pas_card_cursor_dispose;
- init_pas_card_cursor_corba_class ();
+ corba_class_init (klass);
}
static void
pas_card_cursor_init (PASCardCursor *cursor)
{
cursor->priv = g_new(PASCardCursorPrivate, 1);
+ cursor->priv->corba_cursor = CORBA_OBJECT_NIL;
cursor->priv->get_length = NULL;
cursor->priv->get_nth = NULL;
cursor->priv->data = NULL;
}
-GtkType
-pas_card_cursor_get_type (void)
-{
- static GtkType type = 0;
-
- if (!type){
- GtkTypeInfo info = {
- "PASCardCursor",
- sizeof (PASCardCursor),
- sizeof (PASCardCursorClass),
- (GtkClassInitFunc) pas_card_cursor_class_init,
- (GtkObjectInitFunc) pas_card_cursor_init,
- NULL, /* reserved 1 */
- NULL, /* reserved 2 */
- (GtkClassInitFunc) NULL
- };
-
- type = gtk_type_unique (bonobo_object_get_type (), &info);
- }
+BONOBO_TYPE_FUNC_FULL (
+ PASCardCursor,
+ GNOME_Evolution_Addressbook_CardCursor,
+ BONOBO_TYPE_OBJECT,
+ pas_card_cursor);
- return type;
-}
-
-PASCardCursor *
+void
pas_card_cursor_construct (PASCardCursor *cursor,
GNOME_Evolution_Addressbook_CardCursor corba_cursor,
PASCardCursorLengthFunc get_length,
PASCardCursorNthFunc get_nth,
gpointer data)
{
- g_return_val_if_fail (cursor != NULL, NULL);
- g_return_val_if_fail (PAS_IS_CARD_CURSOR (cursor), NULL);
- g_return_val_if_fail (corba_cursor != CORBA_OBJECT_NIL, NULL);
-
- /*
- * Call parent constructor
- */
- if (!bonobo_object_construct (BONOBO_OBJECT (cursor), (CORBA_Object) corba_cursor))
+ PASCardCursorPrivate *priv;
+
+ g_return_if_fail (cursor != NULL);
+ g_return_if_fail (PAS_IS_CARD_CURSOR (cursor));
+ g_return_if_fail (corba_cursor != CORBA_OBJECT_NIL);
+
+ priv = cursor->priv;
+
+ g_return_if_fail (priv->corba_cursor == CORBA_OBJECT_NIL);
+
+ priv->corba_cursor = corba_cursor;
+ priv->get_length = get_length;
+ priv->get_nth = get_nth;
+ priv->data = data;
+}
+
+static PASCardCursorServant *
+create_servant (PASCardCursor *cursor)
+{
+ PASCardCursorServant *servant;
+ POA_GNOME_Evolution_Addressbook_CardCursor *corba_servant;
+ CORBA_Environment ev;
+
+ CORBA_exception_init (&ev);
+
+ servant = g_new0 (PASCardCursorServant, 1);
+ corba_servant = (POA_GNOME_Evolution_Addressbook_CardCursor *) servant;
+
+ corba_servant->vepv = &pas_card_cursor_vepv;
+ POA_GNOME_Evolution_Addressbook_CardCursor__init ((PortableServer_Servant) corba_servant, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_free (servant);
+ CORBA_exception_free (&ev);
return NULL;
+ }
- /*
- * Initialize cursor
- */
- cursor->priv->get_length = get_length;
- cursor->priv->get_nth = get_nth;
- cursor->priv->data = data;
-
- /*
- * Success: return the GtkType we were given
- */
- return cursor;
+ servant->object = cursor;
+
+ CORBA_exception_free (&ev);
+
+ return servant;
}
-/*
- * This routine creates the ORBit CORBA server and initializes the
- * CORBA side of things
- */
static GNOME_Evolution_Addressbook_CardCursor
-create_cursor (BonoboObject *cursor)
+activate_servant (PASCardCursor *cursor,
+ POA_GNOME_Evolution_Addressbook_CardCursor *servant)
{
- POA_GNOME_Evolution_Addressbook_CardCursor *servant;
+ GNOME_Evolution_Addressbook_CardCursor corba_object;
CORBA_Environment ev;
- servant = (POA_GNOME_Evolution_Addressbook_CardCursor *) g_new0 (BonoboObjectServant, 1);
- servant->vepv = &cursor_vepv;
-
CORBA_exception_init (&ev);
- POA_GNOME_Evolution_Addressbook_CardCursor__init ((PortableServer_Servant) servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION){
- g_free (servant);
+
+ CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
+
+ corba_object = PortableServer_POA_servant_to_reference (bonobo_poa(), servant, &ev);
+
+ if (ev._major == CORBA_NO_EXCEPTION && ! CORBA_Object_is_nil (corba_object, &ev)) {
CORBA_exception_free (&ev);
- return CORBA_OBJECT_NIL;
+ return corba_object;
}
CORBA_exception_free (&ev);
- /*
- * Activates the CORBA object.
- */
- return (GNOME_Evolution_Addressbook_CardCursor) bonobo_object_activate_servant (cursor, servant);
+ return CORBA_OBJECT_NIL;
}
PASCardCursor *
@@ -208,19 +205,20 @@ pas_card_cursor_new (PASCardCursorLengthFunc get_length,
gpointer data)
{
PASCardCursor *cursor;
+ PASCardCursorPrivate *priv;
GNOME_Evolution_Addressbook_CardCursor corba_cursor;
- cursor = gtk_type_new (pas_card_cursor_get_type ());
- corba_cursor = create_cursor (BONOBO_OBJECT (cursor));
+ cursor = g_object_new (PAS_TYPE_CARD_CURSOR, NULL);
+ priv = cursor->priv;
- if (corba_cursor == CORBA_OBJECT_NIL){
- gtk_object_unref (GTK_OBJECT (cursor));
- return NULL;
- }
-
- return pas_card_cursor_construct (cursor,
- corba_cursor,
- get_length,
- get_nth,
- data);
+ priv->servant = create_servant (cursor);
+ corba_cursor = activate_servant (cursor, (POA_GNOME_Evolution_Addressbook_CardCursor*)priv->servant);
+
+ pas_card_cursor_construct (cursor,
+ corba_cursor,
+ get_length,
+ get_nth,
+ data);
+
+ return cursor;
}