aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-calendar-selector.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@src.gnome.org>2008-09-25 06:53:30 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2008-09-25 06:53:30 +0800
commit9515b98403f2f7ef77dc6c51f82505fccef08c2b (patch)
tree2557338a0ad82878b8b2d84ecc9df7e169d75bc8 /calendar/gui/e-calendar-selector.c
parent73c370019c4de89d4c901ee8c25cc0cbb55992fb (diff)
downloadgsoc2013-evolution-9515b98403f2f7ef77dc6c51f82505fccef08c2b.tar.gz
gsoc2013-evolution-9515b98403f2f7ef77dc6c51f82505fccef08c2b.tar.zst
gsoc2013-evolution-9515b98403f2f7ef77dc6c51f82505fccef08c2b.zip
Saving progress. Experimenting with directory layout.
Saving progress. Experimenting with directory layout. svn path=/branches/kill-bonobo/; revision=36446
Diffstat (limited to 'calendar/gui/e-calendar-selector.c')
-rw-r--r--calendar/gui/e-calendar-selector.c63
1 files changed, 62 insertions, 1 deletions
diff --git a/calendar/gui/e-calendar-selector.c b/calendar/gui/e-calendar-selector.c
index b23ef1b32a..b9ebdf7f70 100644
--- a/calendar/gui/e-calendar-selector.c
+++ b/calendar/gui/e-calendar-selector.c
@@ -42,6 +42,67 @@ static GtkTargetEntry drag_types[] = {
static gpointer parent_class;
+static gboolean
+calendar_selector_update_single_object (ECal *client,
+ icalcomponent *icalcomp)
+{
+ gchar *uid;
+ icalcomponent *tmp_icalcomp;
+
+ uid = (gchar *) icalcomponent_get_uid (icalcomp);
+
+ if (e_cal_get_object (client, uid, NULL, &tmp_icalcomp, NULL))
+ return e_cal_modify_object (
+ client, icalcomp, CALOBJ_MOD_ALL, NULL);
+
+ return e_cal_create_object (client, icalcomp, &uid, NULL);
+}
+
+static gboolean
+calendar_selector_update_objects (ECal *client,
+ icalcomponent *icalcomp)
+{
+ icalcomponent *subcomp;
+ icalcomponent_kind kind;
+
+ kind = icalcomponent_isa (icalcomp);
+ if (kind == ICAL_VTODO_COMPONENT || kind == ICAL_VEVENT_COMPONENT)
+ return calendar_selector_update_single_object (
+ client, icalcomp);
+ else if (kind != ICAL_VCALENDAR_COMPONENT)
+ return FALSE;
+
+ subcomp = icalcomponent_get_first_component (
+ icalcomp, ICAL_ANY_COMPONENT);
+ while (subcomp != NULL) {
+ gboolean success;
+
+ kind = icalcomponent_isa (subcomp);
+ if (kind == ICAL_VTIMEZONE_COMPONENT) {
+ icaltimezone *zone;
+
+ zone = icaltimezone_new ();
+ icaltimezone_set_component (zone, subcomp);
+
+ success = e_cal_add_timezone (client, zone, NULL);
+ icaltimezone_free (zone, 1);
+ if (!success)
+ return FALSE;
+ } else if (kind == ICAL_VTODO_COMPONENT ||
+ kind == ICAL_VEVENT_COMPONENT) {
+ success = calendar_selector_update_single_object (
+ client, subcomp);
+ if (!success)
+ return FALSE;
+ }
+
+ subcomp = icalcomponent_get_next_component (
+ icalcomp, ICAL_ANY_COMPONENT);
+ }
+
+ return TRUE;
+}
+
static void
calendar_selector_drag_leave (GtkWidget *widget,
GdkDragContext *context,
@@ -208,7 +269,7 @@ calendar_selector_drag_data_received (GtkWidget *widget,
if (client != NULL) {
if (e_cal_open (client, TRUE, NULL)) {
success = TRUE;
- update_objects (client, icalcomp);
+ calendar_selector_update_objects (client, icalcomp);
}
g_object_unref (client);