aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-client/cal-client.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@ximian.com>2001-08-01 11:41:51 +0800
committerFederico Mena Quintero <federico@src.gnome.org>2001-08-01 11:41:51 +0800
commit96d24f1297eaa5a6333b9fcfdf35420d273703af (patch)
tree7ee041b080dc6d9ae5f95bb61236ae0cff203663 /calendar/cal-client/cal-client.c
parentfe8112f64b3083648d9b0e127aaa0868f25e28fd (diff)
downloadgsoc2013-evolution-96d24f1297eaa5a6333b9fcfdf35420d273703af.tar
gsoc2013-evolution-96d24f1297eaa5a6333b9fcfdf35420d273703af.tar.gz
gsoc2013-evolution-96d24f1297eaa5a6333b9fcfdf35420d273703af.tar.bz2
gsoc2013-evolution-96d24f1297eaa5a6333b9fcfdf35420d273703af.tar.lz
gsoc2013-evolution-96d24f1297eaa5a6333b9fcfdf35420d273703af.tar.xz
gsoc2013-evolution-96d24f1297eaa5a6333b9fcfdf35420d273703af.tar.zst
gsoc2013-evolution-96d24f1297eaa5a6333b9fcfdf35420d273703af.zip
The Wombat now keeps track of which categories are present in the objects
2001-07-31 Federico Mena Quintero <federico@ximian.com> The Wombat now keeps track of which categories are present in the objects of a calendar. It will notify the clients of changes in this set. This is to make the category drop-down menus in the calendar/tasks views be always up to date. * idl/evolution-calendar.idl (Listener): Added a notifyCategoriesChanged() method. The Wombat now keeps track of the categories within a calendar. * cal-client/cal-listener.[ch]: Switched it to use BonoboXObject. Also added the notifyCategoriesChanged implementation. * cal-client/cal-client.[ch]: Added a "categories_changed" signal. * pcs/cal-backend-file.c: Maintain a list of the live categories. (update_categories_from_comp): New function to maintain the set of live categories. (add_component): Update the set of categories. (remove_component): Likewise. (open_cal): Notify about changes in the set of categories. (create_cal): Likewise. (cal_backend_file_update_objects): Likewise. (cal_backend_file_remove_object): Likewise. (notify_categories_changed): New function to notify the clients about the current set of categories. * pcs/cal.c (cal_notify_categories_changed): New function. svn path=/trunk/; revision=11536
Diffstat (limited to 'calendar/cal-client/cal-client.c')
-rw-r--r--calendar/cal-client/cal-client.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c
index 007466ddad..bb888e6205 100644
--- a/calendar/cal-client/cal-client.c
+++ b/calendar/cal-client/cal-client.c
@@ -71,6 +71,7 @@ enum {
CAL_OPENED,
OBJ_UPDATED,
OBJ_REMOVED,
+ CATEGORIES_CHANGED,
FORGET_PASSWORD,
LAST_SIGNAL
};
@@ -160,6 +161,14 @@ cal_client_class_init (CalClientClass *class)
gtk_marshal_NONE__STRING,
GTK_TYPE_NONE, 1,
GTK_TYPE_STRING);
+ cal_client_signals[CATEGORIES_CHANGED] =
+ gtk_signal_new ("categories_changed",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (CalClientClass, categories_changed),
+ gtk_marshal_NONE__POINTER,
+ GTK_TYPE_NONE, 1,
+ GTK_TYPE_POINTER);
cal_client_signals[FORGET_PASSWORD] =
gtk_signal_new ("forget_password",
GTK_RUN_FIRST,
@@ -171,6 +180,12 @@ cal_client_class_init (CalClientClass *class)
gtk_object_class_add_signals (object_class, cal_client_signals, LAST_SIGNAL);
+ class->cal_opened = NULL;
+ class->obj_updated = NULL;
+ class->obj_removed = NULL;
+ class->categories_changed = NULL;
+ class->forget_password = NULL;
+
object_class->destroy = cal_client_destroy;
}
@@ -455,6 +470,28 @@ obj_removed_cb (CalListener *listener, const GNOME_Evolution_Calendar_CalObjUID
gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_REMOVED], uid);
}
+/* Handle the categories_changed signal from the listener */
+static void
+categories_changed_cb (CalListener *listener, const GNOME_Evolution_Calendar_StringSeq *categories,
+ gpointer data)
+{
+ CalClient *client;
+ GPtrArray *cats;
+ int i;
+
+ client = CAL_CLIENT (data);
+
+ cats = g_ptr_array_new ();
+ g_ptr_array_set_size (cats, categories->_length);
+
+ for (i = 0; i < categories->_length; i++)
+ cats->pdata[i] = categories->_buffer[i];
+
+ gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[CATEGORIES_CHANGED], cats);
+
+ g_ptr_array_free (cats, TRUE);
+}
+
/* Handle the get_password signal from the Wombatclient */
static gchar *
client_get_password_cb (WombatClient *w_client,
@@ -626,6 +663,7 @@ cal_client_open_calendar (CalClient *client, const char *str_uri, gboolean only_
priv->listener = cal_listener_new (cal_opened_cb,
obj_updated_cb,
obj_removed_cb,
+ categories_changed_cb,
client);
if (!priv->listener) {
g_message ("cal_client_open_calendar(): could not create the listener");