aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-client/cal-client.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@helixcode.com>2000-02-01 18:06:20 +0800
committerArturo Espinosa <unammx@src.gnome.org>2000-02-01 18:06:20 +0800
commit1da8f9c265082e10fb9694a6bf92a0bae2b1312b (patch)
treeb2b07bf1755ed462495258e16ae692b2666d3f4b /calendar/cal-client/cal-client.c
parenta2d268b3d195589ab41ddf2e13eaf45040e86803 (diff)
downloadgsoc2013-evolution-1da8f9c265082e10fb9694a6bf92a0bae2b1312b.tar.gz
gsoc2013-evolution-1da8f9c265082e10fb9694a6bf92a0bae2b1312b.tar.zst
gsoc2013-evolution-1da8f9c265082e10fb9694a6bf92a0bae2b1312b.zip
Handle the cal_loaded signal from the listener. Store the calendar client
2000-02-01 Federico Mena Quintero <federico@helixcode.com> * cal-client.c (cal_loaded): Handle the cal_loaded signal from the listener. Store the calendar client interface object, and emit our own cal_loaded signal. (cal_client_load_calendar): Connect to the listener's signals. (cal_client_class_init): Added the "obj_added", "obj_removed", öbj_changed" signals. (obj_added_cb): Handle the signal from the listener. (obj_removed_cb): Likewise. (obj_changed_cb): Likewise. svn path=/trunk/; revision=1658
Diffstat (limited to 'calendar/cal-client/cal-client.c')
-rw-r--r--calendar/cal-client/cal-client.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c
index 1458a41b4b..05025a07e7 100644
--- a/calendar/cal-client/cal-client.c
+++ b/calendar/cal-client/cal-client.c
@@ -44,6 +44,9 @@ typedef struct {
/* Our calendar listener */
CalListener *listener;
+
+ /* The calendar client interface object we are contacting */
+ Evolution_Calendar_Cal cal;
} CalClientPrivate;
@@ -51,6 +54,9 @@ typedef struct {
/* Signal IDs */
enum {
CAL_LOADED,
+ OBJ_ADDED,
+ OBJ_REMOVED,
+ OBJ_CHANGED,
LAST_SIGNAL
};
@@ -114,6 +120,30 @@ cal_client_class_init (CalClientClass *class)
gtk_marshal_NONE__ENUM,
GTK_TYPE_NONE, 1,
GTK_TYPE_ENUM);
+ cal_client_signals[OBJ_ADDED] =
+ gtk_signal_new ("obj_added",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (CalClientClass, obj_added),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1,
+ GTK_TYPE_STRING);
+ cal_client_signals[OBJ_REMOVED] =
+ gtk_signal_new ("obj_removed",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (CalClientClass, obj_removed),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1,
+ GTK_TYPE_STRING);
+ cal_client_signals[OBJ_CHANGED] =
+ gtk_signal_new ("obj_changed",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (CalClientClass, obj_changed),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1,
+ GTK_TYPE_STRING);
gtk_object_class_add_signals (object_class, cal_client_signals, LAST_SIGNAL);
@@ -156,6 +186,93 @@ cal_client_destroy (GtkObject *object)
+/* Signal handlers for the listener's signals */
+
+/* Handle the cal_loaded signal from the listener */
+static void
+cal_loaded_cb (CalListener *listener,
+ CalListenerLoadStatus status,
+ Evolution_Calendar_Cal cal,
+ gpointer data)
+{
+ CalClient *client;
+ CalClientPrivate *priv;
+ CORBA_Environment ev;
+ Evolution_Calendar_Cal cal_copy;
+
+ client = CAL_CLIENT (data);
+ priv = client->priv;
+
+ g_assert (priv->state == LOAD_STATE_LOADING);
+
+ switch (status) {
+ case CAL_LISTENER_LOAD_SUCCESS:
+ CORBA_exception_init (&ev);
+ cal_copy = CORBA_Object_duplicate (cal, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_message ("cal_loaded(): could not duplicate the calendar client interface");
+ CORBA_exception_free (&ev);
+ goto error;
+ }
+ CORBA_exception_free (&ev);
+
+ priv->cal = cal_copy;
+ priv->load_status = LOAD_STATE_LOADED;
+
+ gtk_signal_emit (client, cal_client_signals[CAL_LOADED], CAL_CLIENT_LOAD_SUCCESS);
+ goto out;
+
+ case CAL_LISTENER_LOAD_ERROR:
+ goto error;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ error:
+
+ gtk_object_unref (priv->listener);
+ priv->listener = NULL;
+ priv->load_state = LOAD_STATE_NOT_LOADED;
+
+ gtk_signal_emit (client, cal_client_signals[CAL_LOADED], CAL_CLIENT_LOAD_ERROR);
+
+ out:
+ g_assert (priv->load_state != CAL_STATE_LOADING);
+}
+
+/* Handle the obj_added signal from the listener */
+static void
+obj_added_cb (CalListener *listener, Evolution_Calendar_CalObj calobj, gpointer data)
+{
+ CalClient *client;
+
+ client = CAL_CLIENT (data);
+ gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_ADDED], calobj);
+}
+
+/* Handle the obj_removed signal from the listener */
+static void
+obj_removed_cb (CalListener *listener, Evolution_Calendar_CalObjUID uid, gpointer data)
+{
+ CalClient *client;
+
+ client = CAL_CLIENT (data);
+ gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_REMOVED], uid);
+}
+
+/* Handle the obj_changed signal from the listener */
+static void
+obj_changed_cb (CalListener *listener, Evolution_Calendar_CalObj calobj, gpointer data)
+{
+ CalClient *client;
+
+ client = CAL_CLIENT (data);
+ gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_CHANGED], calobj);
+}
+
+
+
/**
* cal_client_construct:
* @client: A calendar client.
@@ -272,6 +389,19 @@ cal_client_load_calendar (CalClient *client, const char *str_uri)
return FALSE;
}
+ gtk_signal_connect (GTK_OBJECT (priv->listener), "cal_loaded",
+ GTK_SIGNAL_FUNC (cal_loaded_cb),
+ client);
+ gtk_signal_connect (GTK_OBJECT (priv->listener), "obj_added",
+ GTK_SIGNAL_FUNC (obj_added_cb),
+ client);
+ gtk_signal_connect (GTK_OBJECT (priv->listener), "obj_removed",
+ GTK_SIGNAL_FUNC (obj_removed_cb),
+ client);
+ gtk_signal_connect (GTK_OBJECT (priv->listener), "obj_changed",
+ GTK_SIGNAL_FUNC (obj_changed_cb),
+ client);
+
corba_listener = (Evolution_Calendar_Listener) bonobo_object_corba_objref (
BONOBO_OBJECT (priv->listener));