+2004-02-01 JP Rosevear <jpr@ximian.com>
+
+ * libecal/e-cal.h: order the signals more sensibly
+
+ * libecal/e-cal.c (destroy_factories): use G_STRLOC
+ (categories_changed_cb): set the size of the array so the length
+ is set
+ (e_cal_init): remove extra listener args, listen for new signals
+
+ * libecal/e-cal-marshal.list: add signal marshaller
+
+ * libecal/e-cal-listener.h: add new signals, remove function
+ callback protos, update protos
+
+ * libecal/e-cal-listener.c (impl_notifyErrorOccurred): emit error
+ signal
+ (impl_notifyCategoriesChanged): emit categories changed signal
+ (e_cal_listener_init): remove dead initializations
+ (e_cal_listener_finalize): remove dead finalizations
+ (e_cal_listener_class_init): add category and error signals
+ (e_cal_listener_construct): remove error and category function
+ params
+ (e_cal_listener_new): ditto
+
2004-01-31 JP Rosevear <jpr@ximian.com>
* libecal/e-cal.c (e_cal_is_read_only): return a proper GError and
struct ECalListenerPrivate {
/* Notification functions and their closure data */
ECalListenerCalSetModeFn cal_set_mode_fn;
- ECalListenerErrorOccurredFn error_occurred_fn;
- ECalListenerCategoriesChangedFn categories_changed_fn;
gpointer fn_data;
/* Whether notification is desired */
GET_CHANGES,
GET_FREE_BUSY,
QUERY,
+ CATEGORIES_CHANGED,
+ BACKEND_ERROR,
LAST_SIGNAL
};
if (!priv->notify)
return;
- g_assert (priv->error_occurred_fn != NULL);
- (* priv->error_occurred_fn) (listener, message, priv->fn_data);
+ g_signal_emit (G_OBJECT (listener), signals[BACKEND_ERROR], 0, message);
}
/* ::notifyCategoriesChanged method */
if (!priv->notify)
return;
- g_assert (priv->categories_changed_fn != NULL);
- (* priv->categories_changed_fn) (listener, categories, priv->fn_data);
+ g_signal_emit (G_OBJECT (listener), signals[CATEGORIES_CHANGED], 0, categories);
}
\f
priv = g_new0 (ECalListenerPrivate, 1);
listener->priv = priv;
- priv->error_occurred_fn = NULL;
- priv->categories_changed_fn = NULL;
-
priv->notify = TRUE;
}
listener = E_CAL_LISTENER (object);
priv = listener->priv;
- priv->error_occurred_fn = NULL;
- priv->categories_changed_fn = NULL;
priv->fn_data = NULL;
priv->notify = FALSE;
NULL, NULL,
e_cal_marshal_VOID__INT_POINTER,
G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_POINTER);
+ signals[CATEGORIES_CHANGED] =
+ g_signal_new ("categories_changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalListenerClass, categories_changed),
+ NULL, NULL,
+ e_cal_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
+ signals[BACKEND_ERROR] =
+ g_signal_new ("backend_error",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalListenerClass, backend_error),
+ NULL, NULL,
+ e_cal_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
}
BONOBO_TYPE_FUNC_FULL (ECalListener,
ECalListener *
e_cal_listener_construct (ECalListener *listener,
- ECalListenerCalSetModeFn cal_set_mode_fn,
- ECalListenerErrorOccurredFn error_occurred_fn,
- ECalListenerCategoriesChangedFn categories_changed_fn,
- gpointer fn_data)
+ ECalListenerCalSetModeFn cal_set_mode_fn,
+ gpointer fn_data)
{
ECalListenerPrivate *priv;
g_return_val_if_fail (listener != NULL, NULL);
g_return_val_if_fail (E_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;
* e_cal_listener_new:
* @cal_set_mode_fn: Function callback for notification that a
* calendar changed modes
- * @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: losure data pointer that will be passed to the notification
* functions.
*
**/
ECalListener *
e_cal_listener_new (ECalListenerCalSetModeFn cal_set_mode_fn,
- ECalListenerErrorOccurredFn error_occurred_fn,
- ECalListenerCategoriesChangedFn categories_changed_fn,
- gpointer fn_data)
+ gpointer fn_data)
{
ECalListener *listener;
- g_return_val_if_fail (error_occurred_fn != NULL, NULL);
- g_return_val_if_fail (categories_changed_fn != NULL, NULL);
+ g_return_val_if_fail (cal_set_mode_fn != NULL, NULL);
listener = g_object_new (E_TYPE_CAL_LISTENER,
"poa", bonobo_poa_get_threaded (ORBIT_THREAD_HINT_PER_REQUEST, NULL),
return e_cal_listener_construct (listener,
cal_set_mode_fn,
- error_occurred_fn,
- categories_changed_fn,
fn_data);
}
void (*get_free_busy) (ECalListener *listener, ECalendarStatus status, GList *freebusy);
void (*query) (ECalListener *listener, ECalendarStatus status, GNOME_Evolution_Calendar_CalView query);
+
+ void (*categories_changed) (ECalListener *listener, ECalendarStatus status, GPtrArray *categories);
+ void (*backend_error) (ECalListener *listener, ECalendarStatus status, const char *message);
} ECalListenerClass;
/* Notification functions */
GNOME_Evolution_Calendar_CalMode mode,
gpointer data);
-typedef void (* ECalListenerErrorOccurredFn) (ECalListener *listener,
- const char *message,
- gpointer data);
-
-typedef void (* ECalListenerCategoriesChangedFn) (ECalListener *listener,
- const GNOME_Evolution_Calendar_StringSeq *categories,
- gpointer data);
-
-
GType e_cal_listener_get_type (void);
ECalListener *e_cal_listener_construct (ECalListener *listener,
ECalListenerCalSetModeFn cal_set_mode_fn,
- ECalListenerErrorOccurredFn error_occurred_fn,
- ECalListenerCategoriesChangedFn categories_changed_fn,
gpointer fn_data);
ECalListener *e_cal_listener_new (ECalListenerCalSetModeFn cal_set_mode_fn,
- ECalListenerErrorOccurredFn error_occurred_fn,
- ECalListenerCategoriesChangedFn categories_changed_fn,
gpointer fn_data);
void e_cal_listener_stop_notification (ECalListener *listener);
NONE:INT
NONE:POINTER
+NONE:STRING
NONE:INT,STRING
NONE:INT,BOOL
NONE:INT,POINTER
result = CORBA_Object_is_nil (factory, &ev);
if (BONOBO_EX (&ev)) {
- g_message ("destroy_factories(): could not see if a factory was nil");
+ g_message (G_STRLOC ": could not see if a factory was nil");
CORBA_exception_free (&ev);
continue;
CORBA_Object_release (factory, &ev);
if (BONOBO_EX (&ev)) {
- g_message ("destroy_factories(): could not release a factory");
+ g_message (G_STRLOC ": could not release a factory");
CORBA_exception_free (&ev);
}
}
cat_data = g_new0 (ECalCategoryData, 1);
cat_data->ecal = g_object_ref (data);
- cat_data->categories = g_ptr_array_sized_new (categories->_length);
+ cat_data->categories = g_ptr_array_new ();
+ g_ptr_array_set_size (cat_data->categories, categories->_length);
for (i = 0; i < categories->_length; i++)
cat_data->categories->pdata[i] = g_strdup (categories->_buffer[i]);
-
+
g_idle_add (categories_changed_idle_cb, cat_data);
}
priv->load_state = E_CAL_LOAD_NOT_LOADED;
priv->uri = NULL;
priv->mutex = g_mutex_new ();
- priv->listener = e_cal_listener_new (cal_set_mode_cb,
- backend_error_cb,
- categories_changed_cb,
- ecal);
+ priv->listener = e_cal_listener_new (cal_set_mode_cb, ecal);
priv->cal_address = NULL;
priv->alarm_email_address = NULL;
g_signal_connect (G_OBJECT (priv->listener), "get_changes", G_CALLBACK (cal_get_changes_cb), ecal);
g_signal_connect (G_OBJECT (priv->listener), "get_free_busy", G_CALLBACK (cal_get_free_busy_cb), ecal);
g_signal_connect (G_OBJECT (priv->listener), "query", G_CALLBACK (cal_query_cb), ecal);
+ g_signal_connect (G_OBJECT (priv->listener), "categories_changed", G_CALLBACK (categories_changed_cb), ecal);
+ g_signal_connect (G_OBJECT (priv->listener), "backend_error", G_CALLBACK (backend_error_cb), ecal);
}
/* Finalize handler for the calendar ecal */
void (* cal_opened) (ECal *ecal, ECalendarStatus status);
void (* cal_set_mode) (ECal *ecal, ECalSetModeStatus status, CalMode mode);
- void (* backend_error) (ECal *ecal, const char *message);
-
void (* categories_changed) (ECal *ecal, GPtrArray *categories);
+ void (* backend_error) (ECal *ecal, const char *message);
void (* backend_died) (ECal *ecal);
};