diff options
author | Matthew Barnes <mbarnes@src.gnome.org> | 2008-09-25 06:53:30 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2008-09-25 06:53:30 +0800 |
commit | 9515b98403f2f7ef77dc6c51f82505fccef08c2b (patch) | |
tree | 2557338a0ad82878b8b2d84ecc9df7e169d75bc8 /calendar/gui/e-calendar-selector.c | |
parent | 73c370019c4de89d4c901ee8c25cc0cbb55992fb (diff) | |
download | gsoc2013-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.c | 63 |
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); |