diff options
Diffstat (limited to 'addressbook/backend/ebook/e-book-listener.c')
-rw-r--r-- | addressbook/backend/ebook/e-book-listener.c | 177 |
1 files changed, 104 insertions, 73 deletions
diff --git a/addressbook/backend/ebook/e-book-listener.c b/addressbook/backend/ebook/e-book-listener.c index ca366386f2..ed3fad586a 100644 --- a/addressbook/backend/ebook/e-book-listener.c +++ b/addressbook/backend/ebook/e-book-listener.c @@ -10,8 +10,9 @@ */ #include <config.h> -#include <gtk/gtksignal.h> +#include <bonobo/bonobo-main.h> #include "e-book-listener.h" +#include "e-book-marshal.h" static EBookStatus e_book_listener_convert_status (GNOME_Evolution_Addressbook_BookListener_CallStatus status); @@ -22,10 +23,13 @@ enum { static guint e_book_listener_signals [LAST_SIGNAL]; -static BonoboObjectClass *e_book_listener_parent_class; +static BonoboObjectClass *parent_class; POA_GNOME_Evolution_Addressbook_BookListener__vepv e_book_listener_vepv; struct _EBookListenerPrivate { + EBookListenerServant *servant; + GNOME_Evolution_Addressbook_BookListener corba_objref; + GList *response_queue; gint timeout_id; @@ -102,7 +106,7 @@ e_book_listener_check_queue (EBookListener *listener) listener->priv->timeout_lock = TRUE; if (listener->priv->response_queue != NULL && !listener->priv->stopped) { - gtk_signal_emit (GTK_OBJECT (listener), e_book_listener_signals [RESPONSES_QUEUED]); + g_signal_emit (listener, e_book_listener_signals [RESPONSES_QUEUED], 0); } if (listener->priv->response_queue == NULL || listener->priv->stopped) { @@ -372,7 +376,7 @@ e_book_listener_queue_get_supported_fields_response (EBookListener *listener, static void impl_BookListener_respond_create_card (PortableServer_Servant servant, const GNOME_Evolution_Addressbook_BookListener_CallStatus status, - const GNOME_Evolution_Addressbook_CardId id, + const CORBA_char* id, CORBA_Environment *ev) { EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant)); @@ -410,7 +414,7 @@ impl_BookListener_respond_modify_card (PortableServer_Servant servant, static void impl_BookListener_respond_get_vcard (PortableServer_Servant servant, const GNOME_Evolution_Addressbook_BookListener_CallStatus status, - const GNOME_Evolution_Addressbook_VCard card, + const CORBA_char* card, CORBA_Environment *ev) { EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant)); @@ -646,41 +650,70 @@ e_book_listener_convert_status (const GNOME_Evolution_Addressbook_BookListener_C } } -static EBookListener * -e_book_listener_construct (EBookListener *listener) +void +e_book_listener_construct (EBookListener *listener, + GNOME_Evolution_Addressbook_BookListener corba_objref) { - POA_GNOME_Evolution_Addressbook_BookListener *servant; - CORBA_Environment ev; - CORBA_Object obj; + EBookListenerPrivate *priv; + + g_return_if_fail (listener != NULL); + g_return_if_fail (corba_objref != CORBA_OBJECT_NIL); - g_assert (listener != NULL); - g_assert (E_IS_BOOK_LISTENER (listener)); + priv = listener->priv; - servant = (POA_GNOME_Evolution_Addressbook_BookListener *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &e_book_listener_vepv; + g_return_if_fail (priv->corba_objref == CORBA_OBJECT_NIL); + + priv->corba_objref = corba_objref; +} + +static EBookListenerServant * +create_servant (EBookListener *listener) +{ + EBookListenerServant *servant; + POA_GNOME_Evolution_Addressbook_BookListener *corba_servant; + CORBA_Environment ev; CORBA_exception_init (&ev); - POA_GNOME_Evolution_Addressbook_BookListener__init ((PortableServer_Servant) servant, &ev); + servant = g_new0 (EBookListenerServant, 1); + corba_servant = (POA_GNOME_Evolution_Addressbook_BookListener *) servant; + + corba_servant->vepv = &e_book_listener_vepv; + POA_GNOME_Evolution_Addressbook_BookListener__init ((PortableServer_Servant) corba_servant, &ev); if (ev._major != CORBA_NO_EXCEPTION) { g_free (servant); CORBA_exception_free (&ev); - return NULL; } + servant->object = listener; + CORBA_exception_free (&ev); - obj = bonobo_object_activate_servant (BONOBO_OBJECT (listener), servant); - if (obj == CORBA_OBJECT_NIL) { - g_free (servant); + return servant; +} - return NULL; +static GNOME_Evolution_Addressbook_BookListener +activate_servant (EBookListener *listener, + POA_GNOME_Evolution_Addressbook_BookListener *servant) +{ + GNOME_Evolution_Addressbook_BookListener corba_object; + CORBA_Environment ev; + + CORBA_exception_init (&ev); + + 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; } - bonobo_object_construct (BONOBO_OBJECT (listener), obj); + CORBA_exception_free (&ev); - return listener; + return CORBA_OBJECT_NIL; } /** @@ -695,26 +728,25 @@ EBookListener * e_book_listener_new () { EBookListener *listener; - EBookListener *retval; + EBookListenerPrivate *priv; + GNOME_Evolution_Addressbook_BookListener corba_objref; - listener = gtk_type_new (E_BOOK_LISTENER_TYPE); + listener = g_object_new (E_TYPE_BOOK_LISTENER, NULL); + priv = listener->priv; - retval = e_book_listener_construct (listener); + priv->servant = create_servant (listener); + corba_objref = activate_servant (listener, (POA_GNOME_Evolution_Addressbook_BookListener *) priv->servant); - if (retval == NULL) { - g_warning ("e_book_listener_new: Error constructing " - "EBookListener!\n"); - bonobo_object_unref (BONOBO_OBJECT (listener)); - return NULL; - } + e_book_listener_construct (listener, corba_objref); - return retval; + return listener; } static void e_book_listener_init (EBookListener *listener) { listener->priv = g_new0 (EBookListenerPrivate, 1); + listener->priv->corba_objref = CORBA_OBJECT_NIL; } void @@ -726,7 +758,7 @@ e_book_listener_stop (EBookListener *listener) } static void -e_book_listener_destroy (GtkObject *object) +e_book_listener_dispose (GObject *object) { EBookListener *listener = E_BOOK_LISTENER (object); GList *l; @@ -746,88 +778,87 @@ e_book_listener_destroy (GtkObject *object) g_list_free (listener->priv->response_queue); g_free (listener->priv); - - GTK_OBJECT_CLASS (e_book_listener_parent_class)->destroy (object); + + G_OBJECT_CLASS (parent_class)->dispose (object); } -POA_GNOME_Evolution_Addressbook_BookListener__epv * -e_book_listener_get_epv (void) +static void +corba_class_init (void) { + POA_GNOME_Evolution_Addressbook_BookListener__vepv *vepv; POA_GNOME_Evolution_Addressbook_BookListener__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_BookListener__epv, 1); + + epv = g_new0 (POA_GNOME_Evolution_Addressbook_BookListener__epv, 1); epv->notifyOpenBookProgress = impl_BookListener_report_open_book_progress; epv->notifyBookOpened = impl_BookListener_respond_open_book; - epv->notifyCardCreated = impl_BookListener_respond_create_card; epv->notifyCardRemoved = impl_BookListener_respond_remove_card; epv->notifyCardModified = impl_BookListener_respond_modify_card; - epv->notifyAuthenticationResult = impl_BookListener_respond_authentication_result; epv->notifySupportedFields = impl_BookListener_response_get_supported_fields; - epv->notifyCardRequested = impl_BookListener_respond_get_vcard; epv->notifyCursorRequested = impl_BookListener_respond_get_cursor; epv->notifyViewRequested = impl_BookListener_respond_get_view; epv->notifyChangesRequested = impl_BookListener_respond_get_changes; - epv->notifyConnectionStatus = impl_BookListener_report_connection_status; epv->notifyWritable = impl_BookListener_report_writable; - return epv; -} - -static void -e_book_listener_corba_class_init (void) -{ - e_book_listener_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - e_book_listener_vepv.GNOME_Evolution_Addressbook_BookListener_epv = e_book_listener_get_epv (); + vepv = &e_book_listener_vepv; + vepv->_base_epv = base_epv; + vepv->GNOME_Evolution_Addressbook_BookListener_epv = epv; } static void e_book_listener_class_init (EBookListenerClass *klass) { - GtkObjectClass *object_class = (GtkObjectClass *) klass; + GObjectClass *object_class = G_OBJECT_CLASS (klass); - e_book_listener_parent_class = gtk_type_class (bonobo_object_get_type ()); + parent_class = g_type_class_ref (BONOBO_TYPE_OBJECT); e_book_listener_signals [RESPONSES_QUEUED] = - gtk_signal_new ("responses_queued", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EBookListenerClass, responses_queued), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, e_book_listener_signals, LAST_SIGNAL); + g_signal_new ("responses_queued", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EBookListenerClass, responses_queued), + NULL, NULL, + e_book_marshal_NONE__NONE, + G_TYPE_NONE, 0); - object_class->destroy = e_book_listener_destroy; + object_class->dispose = e_book_listener_dispose; - e_book_listener_corba_class_init (); + corba_class_init (); } /** * e_book_listener_get_type: */ -GtkType +GType e_book_listener_get_type (void) { - static GtkType type = 0; + static GType type = 0; if (! type) { - GtkTypeInfo info = { - "EBookListener", - sizeof (EBookListener), + GTypeInfo info = { sizeof (EBookListenerClass), - (GtkClassInitFunc) e_book_listener_class_init, - (GtkObjectInitFunc) e_book_listener_init, - NULL, /* reserved 1 */ - NULL, /* reserved 2 */ - (GtkClassInitFunc) NULL + NULL, /* base_class_init */ + NULL, /* base_class_finalize */ + (GClassInitFunc) e_book_listener_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (EBookListener), + 0, /* n_preallocs */ + (GInstanceInitFunc) e_book_listener_init }; - type = gtk_type_unique (bonobo_object_get_type (), &info); + type = g_type_register_static (G_TYPE_OBJECT, "EBookListener", &info, 0); } return type; |