order the signals more sensibly
authorJP Rosevear <jpr@ximian.com>
Sun, 1 Feb 2004 20:51:23 +0000 (20:51 +0000)
committerJP Rosevear <jpr@src.gnome.org>
Sun, 1 Feb 2004 20:51:23 +0000 (20:51 +0000)
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

calendar/ChangeLog
calendar/libecal/e-cal-listener.c
calendar/libecal/e-cal-listener.h
calendar/libecal/e-cal-marshal.list
calendar/libecal/e-cal.c
calendar/libecal/e-cal.h

index 0dabff1..4aed2c1 100644 (file)
@@ -1,3 +1,27 @@
+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
index c23df3c..8c07cb7 100644 (file)
@@ -30,8 +30,6 @@
 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 */
@@ -62,6 +60,8 @@ enum {
        GET_CHANGES,
        GET_FREE_BUSY,
        QUERY,
+       CATEGORIES_CHANGED,
+       BACKEND_ERROR,
        LAST_SIGNAL
 };
 
@@ -630,8 +630,7 @@ impl_notifyErrorOccurred (PortableServer_Servant servant,
        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 */
@@ -649,8 +648,7 @@ impl_notifyCategoriesChanged (PortableServer_Servant servant,
        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
@@ -664,9 +662,6 @@ e_cal_listener_init (ECalListener *listener, ECalListenerClass *klass)
        priv = g_new0 (ECalListenerPrivate, 1);
        listener->priv = priv;
 
-       priv->error_occurred_fn = NULL;
-       priv->categories_changed_fn = NULL;
-
        priv->notify = TRUE;
 }
 
@@ -683,8 +678,6 @@ e_cal_listener_finalize (GObject *object)
        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;
@@ -910,6 +903,22 @@ e_cal_listener_class_init (ECalListenerClass *klass)
                              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,
@@ -919,24 +928,18 @@ 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;
@@ -946,9 +949,6 @@ e_cal_listener_construct (ECalListener *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.
  * 
@@ -958,14 +958,11 @@ e_cal_listener_construct (ECalListener *listener,
  **/
 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),
@@ -973,8 +970,6 @@ e_cal_listener_new (ECalListenerCalSetModeFn cal_set_mode_fn,
 
        return e_cal_listener_construct (listener,
                                         cal_set_mode_fn,
-                                        error_occurred_fn,
-                                        categories_changed_fn,
                                         fn_data);
 }
 
index 43ffbc8..cd72ebb 100644 (file)
@@ -81,6 +81,9 @@ typedef struct {
        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 */
@@ -89,26 +92,13 @@ typedef void (* ECalListenerCalSetModeFn) (ECalListener *listener,
                                          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);
index 86087cf..e65eb45 100644 (file)
@@ -1,5 +1,6 @@
 NONE:INT
 NONE:POINTER
+NONE:STRING
 NONE:INT,STRING
 NONE:INT,BOOL
 NONE:INT,POINTER
index 58cf862..82804c3 100644 (file)
@@ -262,7 +262,7 @@ destroy_factories (ECal *ecal)
 
                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;
@@ -273,7 +273,7 @@ destroy_factories (ECal *ecal)
 
                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);
                }
        }
@@ -966,11 +966,12 @@ categories_changed_cb (ECalListener *listener, const GNOME_Evolution_Calendar_St
        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);
 }
 
@@ -1041,10 +1042,7 @@ e_cal_init (ECal *ecal, ECalClass *klass)
        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;
@@ -1077,6 +1075,8 @@ e_cal_init (ECal *ecal, ECalClass *klass)
        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 */
index 26919d7..f8818b3 100644 (file)
@@ -83,10 +83,9 @@ struct _ECalClass {
        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);
 };