diff options
author | Federico Mena Quintero <federico@ximian.com> | 2001-08-01 11:41:51 +0800 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2001-08-01 11:41:51 +0800 |
commit | 96d24f1297eaa5a6333b9fcfdf35420d273703af (patch) | |
tree | 7ee041b080dc6d9ae5f95bb61236ae0cff203663 /calendar/cal-client/cal-client.c | |
parent | fe8112f64b3083648d9b0e127aaa0868f25e28fd (diff) | |
download | gsoc2013-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.c | 38 |
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"); |