diff options
Diffstat (limited to 'calendar/cal-client/cal-listener.c')
-rw-r--r-- | calendar/cal-client/cal-listener.c | 1025 |
1 files changed, 0 insertions, 1025 deletions
diff --git a/calendar/cal-client/cal-listener.c b/calendar/cal-client/cal-listener.c deleted file mode 100644 index ac04be7c07..0000000000 --- a/calendar/cal-client/cal-listener.c +++ /dev/null @@ -1,1025 +0,0 @@ -/* Evolution calendar listener - * - * Copyright (C) 2001 Ximian, Inc. - * - * Author: Federico Mena-Quintero <federico@ximian.com> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include <config.h> - -#include <bonobo/bonobo-main.h> -#include "cal-marshal.h" -#include "cal-listener.h" - - - -/* Private part of the CalListener structure */ -struct CalListenerPrivate { - /* Notification functions and their closure data */ - CalListenerCalSetModeFn cal_set_mode_fn; - CalListenerErrorOccurredFn error_occurred_fn; - CalListenerCategoriesChangedFn categories_changed_fn; - gpointer fn_data; - - /* Whether notification is desired */ - gboolean notify : 1; -}; - -/* Signal IDs */ -enum { - READ_ONLY, - CAL_ADDRESS, - ALARM_ADDRESS, - LDAP_ATTRIBUTE, - STATIC_CAPABILITIES, - OPEN, - REMOVE, - CREATE_OBJECT, - MODIFY_OBJECT, - REMOVE_OBJECT, - DISCARD_ALARM, - RECEIVE_OBJECTS, - SEND_OBJECTS, - DEFAULT_OBJECT, - OBJECT, - OBJECT_LIST, - GET_TIMEZONE, - ADD_TIMEZONE, - SET_DEFAULT_TIMEZONE, - GET_CHANGES, - GET_FREE_BUSY, - QUERY, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -static BonoboObjectClass *parent_class; - -static ECalendarStatus -convert_status (const GNOME_Evolution_Calendar_CallStatus status) -{ - switch (status) { - case GNOME_Evolution_Calendar_Success: - return E_CALENDAR_STATUS_OK; - case GNOME_Evolution_Calendar_RepositoryOffline: - return E_CALENDAR_STATUS_REPOSITORY_OFFLINE; - case GNOME_Evolution_Calendar_PermissionDenied: - return E_CALENDAR_STATUS_PERMISSION_DENIED; - case GNOME_Evolution_Calendar_ObjectNotFound: - return E_CALENDAR_STATUS_OBJECT_NOT_FOUND; - case GNOME_Evolution_Calendar_InvalidObject: - return E_CALENDAR_STATUS_INVALID_OBJECT; - case GNOME_Evolution_Calendar_CardIdAlreadyExists: - return E_CALENDAR_STATUS_CARD_ID_ALREADY_EXISTS; - case GNOME_Evolution_Calendar_AuthenticationFailed: - return E_CALENDAR_STATUS_AUTHENTICATION_FAILED; - case GNOME_Evolution_Calendar_AuthenticationRequired: - return E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED; - case GNOME_Evolution_Calendar_OtherError: - default: - return E_CALENDAR_STATUS_OTHER_ERROR; - } -} - -static void -impl_notifyReadOnly (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - const CORBA_boolean read_only, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[READ_ONLY], 0, convert_status (status), read_only); -} - -static void -impl_notifyCalAddress (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *address, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[CAL_ADDRESS], 0, convert_status (status), address); -} - -static void -impl_notifyAlarmEmailAddress (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *address, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[ALARM_ADDRESS], 0, convert_status (status), address); -} - -static void -impl_notifyLDAPAttribute (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *ldap_attribute, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[LDAP_ATTRIBUTE], 0, convert_status (status), ldap_attribute); -} - -static void -impl_notifyStaticCapabilities (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *capabilities, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[STATIC_CAPABILITIES], 0, convert_status (status)); -} - -/* ::notifyCalOpened method */ -static void -impl_notifyCalOpened (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[OPEN], 0, convert_status (status)); -} - -static void -impl_notifyCalRemoved (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[REMOVE], 0, convert_status (status)); -} - -static void -impl_notifyObjectCreated (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *uid, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[CREATE_OBJECT], 0, convert_status (status), uid); -} - -static void -impl_notifyObjectModified (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[MODIFY_OBJECT], 0, convert_status (status)); -} - -static void -impl_notifyObjectRemoved (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[REMOVE_OBJECT], 0, convert_status (status)); -} - -static void -impl_notifyAlarmDiscarded (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[DISCARD_ALARM], 0, convert_status (status)); -} - -static void -impl_notifyObjectsReceived (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[RECEIVE_OBJECTS], 0, convert_status (status)); -} - -static void -impl_notifyObjectsSent (PortableServer_Servant servant, - GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[SEND_OBJECTS], 0, convert_status (status)); -} - -static void -impl_notifyDefaultObjectRequested (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *object, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[DEFAULT_OBJECT], 0, convert_status (status), object); -} - -static void -impl_notifyObjectRequested (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *object, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[OBJECT], 0, convert_status (status), object); -} - -static GList * -build_object_list (const GNOME_Evolution_Calendar_stringlist *seq) -{ - GList *list; - int i; - - list = NULL; - for (i = 0; i < seq->_length; i++) { - icalcomponent *comp; - - comp = icalcomponent_new_from_string (seq->_buffer[i]); - if (!comp) - continue; - - list = g_list_prepend (list, comp); - } - - return list; -} - -static void -impl_notifyObjectListRequested (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const GNOME_Evolution_Calendar_stringlist *objects, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - GList *object_list, *l; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - object_list = build_object_list (objects); - - g_signal_emit (G_OBJECT (listener), signals[OBJECT_LIST], 0, convert_status (status), object_list); - - for (l = object_list; l; l = l->next) - icalcomponent_free (l->data); - g_list_free (object_list); -} - -static void -impl_notifyTimezoneRequested (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *object, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[GET_TIMEZONE], 0, convert_status (status), object); -} - -static void -impl_notifyTimezoneAdded (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const CORBA_char *tzid, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[ADD_TIMEZONE], 0, convert_status (status), tzid); -} - -static void -impl_notifyDefaultTimezoneSet (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[SET_DEFAULT_TIMEZONE], 0, convert_status (status)); -} - -static GList * -build_change_list (const GNOME_Evolution_Calendar_CalObjChangeSeq *seq) -{ - GList *list = NULL; - icalcomponent *icalcomp; - int i; - - /* Create the list in reverse order */ - for (i = 0; i < seq->_length; i++) { - GNOME_Evolution_Calendar_CalObjChange *corba_coc; - CalClientChange *ccc; - - corba_coc = &seq->_buffer[i]; - ccc = g_new (CalClientChange, 1); - - icalcomp = icalparser_parse_string (corba_coc->calobj); - if (!icalcomp) - continue; - - ccc->comp = cal_component_new (); - if (!cal_component_set_icalcomponent (ccc->comp, icalcomp)) { - icalcomponent_free (icalcomp); - g_object_unref (G_OBJECT (ccc->comp)); - continue; - } - ccc->type = corba_coc->type; - - list = g_list_prepend (list, ccc); - } - - list = g_list_reverse (list); - - return list; -} - -static void -impl_notifyChanges (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const GNOME_Evolution_Calendar_CalObjChangeSeq *seq, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - GList *changes, *l; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - changes = build_change_list (seq); - - g_signal_emit (G_OBJECT (listener), signals[GET_CHANGES], 0, convert_status (status), changes); - - for (l = changes; l; l = l->next) - g_free (l->data); - g_list_free (changes); -} - -static GList * -build_free_busy_list (const GNOME_Evolution_Calendar_CalObjSeq *seq) -{ - GList *list = NULL; - int i; - - /* Create the list in reverse order */ - for (i = 0; i < seq->_length; i++) { - CalComponent *comp; - icalcomponent *icalcomp; - icalcomponent_kind kind; - - icalcomp = icalcomponent_new_from_string (seq->_buffer[i]); - if (!icalcomp) - continue; - - kind = icalcomponent_isa (icalcomp); - if (kind == ICAL_VFREEBUSY_COMPONENT) { - comp = cal_component_new (); - if (!cal_component_set_icalcomponent (comp, icalcomp)) { - icalcomponent_free (icalcomp); - g_object_unref (G_OBJECT (comp)); - continue; - } - - list = g_list_append (list, comp); - } else { - icalcomponent_free (icalcomp); - } - } - - return list; -} - -static void -impl_notifyFreeBusy (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const GNOME_Evolution_Calendar_CalObjSeq *seq, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - GList *freebusy, *l; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - freebusy = build_free_busy_list (seq); - - g_signal_emit (G_OBJECT (listener), signals[GET_FREE_BUSY], 0, convert_status (status), freebusy); - - for (l = freebusy; l; l = l->next) - g_free (l->data); - g_list_free (freebusy); -} - -static void -impl_notifyQuery (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_CallStatus status, - const GNOME_Evolution_Calendar_Query query, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_signal_emit (G_OBJECT (listener), signals[QUERY], 0, convert_status (status), query); -} - -/* ::notifyCalSetMode method */ -static void -impl_notifyCalSetMode (PortableServer_Servant servant, - GNOME_Evolution_Calendar_Listener_SetModeStatus status, - GNOME_Evolution_Calendar_CalMode mode, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_message ("notify_set_mode"); - - g_assert (priv->cal_set_mode_fn != NULL); - (* priv->cal_set_mode_fn) (listener, status, mode, priv->fn_data); -} - - -/* ::notifyErrorOccurred method */ -static void -impl_notifyErrorOccurred (PortableServer_Servant servant, - const CORBA_char *message, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_message ("notify_error"); - - g_assert (priv->error_occurred_fn != NULL); - (* priv->error_occurred_fn) (listener, message, priv->fn_data); -} - -/* ::notifyCategoriesChanged method */ -static void -impl_notifyCategoriesChanged (PortableServer_Servant servant, - const GNOME_Evolution_Calendar_StringSeq *categories, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (!priv->notify) - return; - - g_message ("notify_categories"); - - g_assert (priv->categories_changed_fn != NULL); - (* priv->categories_changed_fn) (listener, categories, priv->fn_data); -} - - - -/* Object initialization function for the calendar listener */ -static void -cal_listener_init (CalListener *listener, CalListenerClass *klass) -{ - CalListenerPrivate *priv; - - priv = g_new0 (CalListenerPrivate, 1); - listener->priv = priv; - - priv->error_occurred_fn = NULL; - priv->categories_changed_fn = NULL; - - priv->notify = TRUE; -} - -/* Finalize handler for the calendar listener */ -static void -cal_listener_finalize (GObject *object) -{ - CalListener *listener; - CalListenerPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_LISTENER (object)); - - listener = CAL_LISTENER (object); - priv = listener->priv; - - priv->error_occurred_fn = NULL; - priv->categories_changed_fn = NULL; - priv->fn_data = NULL; - - priv->notify = FALSE; - - g_free (priv); - listener->priv = NULL; - - if (G_OBJECT_CLASS (parent_class)->finalize) - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - -/* Class initialization function for the calendar listener */ -static void -cal_listener_class_init (CalListenerClass *klass) -{ - GObjectClass *object_class; - - object_class = (GObjectClass *) klass; - - parent_class = g_type_class_peek_parent (klass); - - klass->epv.notifyReadOnly = impl_notifyReadOnly; - klass->epv.notifyCalAddress = impl_notifyCalAddress; - klass->epv.notifyAlarmEmailAddress = impl_notifyAlarmEmailAddress; - klass->epv.notifyLDAPAttribute = impl_notifyLDAPAttribute; - klass->epv.notifyStaticCapabilities = impl_notifyStaticCapabilities; - klass->epv.notifyCalOpened = impl_notifyCalOpened; - klass->epv.notifyCalRemoved = impl_notifyCalRemoved; - klass->epv.notifyObjectCreated = impl_notifyObjectCreated; - klass->epv.notifyObjectModified = impl_notifyObjectModified; - klass->epv.notifyObjectRemoved = impl_notifyObjectRemoved; - klass->epv.notifyAlarmDiscarded = impl_notifyAlarmDiscarded; - klass->epv.notifyObjectsReceived = impl_notifyObjectsReceived; - klass->epv.notifyObjectsSent = impl_notifyObjectsSent; - klass->epv.notifyDefaultObjectRequested = impl_notifyDefaultObjectRequested; - klass->epv.notifyObjectRequested = impl_notifyObjectRequested; - klass->epv.notifyObjectListRequested = impl_notifyObjectListRequested; - klass->epv.notifyTimezoneRequested = impl_notifyTimezoneRequested; - klass->epv.notifyTimezoneAdded = impl_notifyTimezoneAdded; - klass->epv.notifyDefaultTimezoneSet = impl_notifyDefaultTimezoneSet; - klass->epv.notifyChanges = impl_notifyChanges; - klass->epv.notifyFreeBusy = impl_notifyFreeBusy; - klass->epv.notifyQuery = impl_notifyQuery; - klass->epv.notifyCalSetMode = impl_notifyCalSetMode; - klass->epv.notifyErrorOccurred = impl_notifyErrorOccurred; - klass->epv.notifyCategoriesChanged = impl_notifyCategoriesChanged; - - object_class->finalize = cal_listener_finalize; - - signals[READ_ONLY] = - g_signal_new ("read_only", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, read_only), - NULL, NULL, - cal_marshal_VOID__INT_BOOLEAN, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_BOOLEAN); - signals[CAL_ADDRESS] = - g_signal_new ("cal_address", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, cal_address), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[ALARM_ADDRESS] = - g_signal_new ("alarm_address", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, alarm_address), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[LDAP_ATTRIBUTE] = - g_signal_new ("ldap_attribute", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, ldap_attribute), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[STATIC_CAPABILITIES] = - g_signal_new ("static_capabilities", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, static_capabilities), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[OPEN] = - g_signal_new ("open", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, open), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[REMOVE] = - g_signal_new ("remove", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, remove), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[CREATE_OBJECT] = - g_signal_new ("create_object", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, create_object), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[MODIFY_OBJECT] = - g_signal_new ("modify_object", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, modify_object), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[REMOVE_OBJECT] = - g_signal_new ("remove_object", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, remove_object), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[DISCARD_ALARM] = - g_signal_new ("discard_alarm", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, discard_alarm), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[RECEIVE_OBJECTS] = - g_signal_new ("receive_objects", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, receive_objects), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[SEND_OBJECTS] = - g_signal_new ("send_objects", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, send_objects), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[DEFAULT_OBJECT] = - g_signal_new ("default_object", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, default_object), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[OBJECT] = - g_signal_new ("object", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, object), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[OBJECT_LIST] = - g_signal_new ("object_list", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, object_list), - NULL, NULL, - cal_marshal_VOID__INT_POINTER, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER); - signals[GET_TIMEZONE] = - g_signal_new ("get_timezone", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, get_timezone), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[ADD_TIMEZONE] = - g_signal_new ("add_timezone", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, add_timezone), - NULL, NULL, - cal_marshal_VOID__INT_STRING, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_STRING); - signals[SET_DEFAULT_TIMEZONE] = - g_signal_new ("set_default_timezone", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, set_default_timezone), - NULL, NULL, - cal_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); - signals[GET_CHANGES] = - g_signal_new ("get_changes", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, get_changes), - NULL, NULL, - cal_marshal_VOID__INT_POINTER, - G_TYPE_NONE, 1, G_TYPE_INT, G_TYPE_POINTER); - signals[GET_FREE_BUSY] = - g_signal_new ("get_free_busy", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, get_free_busy), - NULL, NULL, - cal_marshal_VOID__INT_POINTER, - G_TYPE_NONE, 1, G_TYPE_INT, G_TYPE_POINTER); - signals[QUERY] = - g_signal_new ("query", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CalListenerClass, query), - NULL, NULL, - cal_marshal_VOID__INT_POINTER, - G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER); -} - -BONOBO_TYPE_FUNC_FULL (CalListener, - GNOME_Evolution_Calendar_Listener, - BONOBO_TYPE_OBJECT, - cal_listener); - -/** - * cal_listener_construct: - * @listener: A calendar listener. - * @cal_opened_fn: Function that will be called to notify that a calendar was - * opened. - * @cal_removed_fn: Function that will be called to notify that a calendar was - * removed - * @error_occurred_fn: Function that will be called to notify errors. - * @categories_changed_fn: Function that will be called to notify that the list - * of categories that are present in the calendar's objects has changed. - * @fn_data: Closure data pointer that will be passed to the notification - * functions. - * - * Constructs a calendar listener by setting the callbacks that it will use for - * notification from the calendar server. - * - * Return value: the same object as the @listener argument. - **/ -CalListener * -cal_listener_construct (CalListener *listener, - CalListenerCalSetModeFn cal_set_mode_fn, - CalListenerErrorOccurredFn error_occurred_fn, - CalListenerCategoriesChangedFn categories_changed_fn, - gpointer fn_data) -{ - CalListenerPrivate *priv; - - g_return_val_if_fail (listener != NULL, NULL); - g_return_val_if_fail (IS_CAL_LISTENER (listener), NULL); - g_return_val_if_fail (cal_set_mode_fn != NULL, NULL); - g_return_val_if_fail (error_occurred_fn != NULL, NULL); - g_return_val_if_fail (categories_changed_fn != NULL, NULL); - - priv = listener->priv; - - priv->cal_set_mode_fn = cal_set_mode_fn; - priv->error_occurred_fn = error_occurred_fn; - priv->categories_changed_fn = categories_changed_fn; - priv->fn_data = fn_data; - - return listener; -} - -/** - * cal_listener_new: - * @cal_opened_fn: Function that will be called to notify that a calendar was - * opened. - * @error_occurred_fn: Function that will be called to notify errors. - * @categories_changed_fn: Function that will be called to notify that the list - * of categories that are present in the calendar's objects has changed. - * @fn_data: Closure data pointer that will be passed to the notification - * functions. - * - * Creates a new #CalListener object. - * - * Return value: A newly-created #CalListener object. - **/ -CalListener * -cal_listener_new (CalListenerCalSetModeFn cal_set_mode_fn, - CalListenerErrorOccurredFn error_occurred_fn, - CalListenerCategoriesChangedFn categories_changed_fn, - gpointer fn_data) -{ - CalListener *listener; - - g_return_val_if_fail (error_occurred_fn != NULL, NULL); - g_return_val_if_fail (categories_changed_fn != NULL, NULL); - - listener = g_object_new (CAL_LISTENER_TYPE, - "poa", bonobo_poa_get_threaded (ORBIT_THREAD_HINT_PER_REQUEST, NULL), - NULL); - - return cal_listener_construct (listener, - cal_set_mode_fn, - error_occurred_fn, - categories_changed_fn, - fn_data); -} - -/** - * cal_listener_stop_notification: - * @listener: A calendar listener. - * - * Informs a calendar listener that no further notification is desired. The - * callbacks specified when the listener was created will no longer be invoked - * after this function is called. - **/ -void -cal_listener_stop_notification (CalListener *listener) -{ - CalListenerPrivate *priv; - - g_return_if_fail (listener != NULL); - g_return_if_fail (IS_CAL_LISTENER (listener)); - - priv = listener->priv; - g_return_if_fail (priv->notify != FALSE); - - priv->notify = FALSE; -} |