aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-week-view.c
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo@ximian.com>2001-11-13 21:20:07 +0800
committerRodrigo Moya <rodrigo@src.gnome.org>2001-11-13 21:20:07 +0800
commit1775a03b0999d1a49ddd26c389d3ab2c1909751b (patch)
tree0527667718539dd9a00ce545c02e33c076b7452e /calendar/gui/e-week-view.c
parent7730f3c699fc2e7996a39bd672d989e325609126 (diff)
downloadgsoc2013-evolution-1775a03b0999d1a49ddd26c389d3ab2c1909751b.tar.gz
gsoc2013-evolution-1775a03b0999d1a49ddd26c389d3ab2c1909751b.tar.zst
gsoc2013-evolution-1775a03b0999d1a49ddd26c389d3ab2c1909751b.zip
only change the day, month and year for the start date, for not screwing
2001-11-13 Rodrigo Moya <rodrigo@ximian.com> * gui/e-week-view.c (selection_received): only change the day, month and year for the start date, for not screwing up the start time, which was being set to midnight always (Fixes Ximian #5287) Also, deal correctly with VCALENDAR components * gui/e-day-view.c (selection_received): dela correctly with VCALENDAR components being pasted svn path=/trunk/; revision=14684
Diffstat (limited to 'calendar/gui/e-week-view.c')
-rw-r--r--calendar/gui/e-week-view.c105
1 files changed, 63 insertions, 42 deletions
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index e6e455863c..53376ba352 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -3635,15 +3635,15 @@ e_week_view_on_cut (GtkWidget *widget, gpointer data)
week_view = E_WEEK_VIEW (data);
e_week_view_on_copy (widget, data);
-
- if (week_view->popup_event_num == -1)
- return;
-
- event = &g_array_index (week_view->events, EWeekViewEvent,
- week_view->popup_event_num);
-
- cal_component_get_uid (event->comp, &uid);
- cal_client_remove_object (week_view->client, uid);
+
+ if (week_view->popup_event_num == -1)
+ return;
+
+ event = &g_array_index (week_view->events, EWeekViewEvent,
+ week_view->popup_event_num);
+
+ cal_component_get_uid (event->comp, &uid);
+ cal_client_remove_object (week_view->client, uid);
}
static void
@@ -3855,13 +3855,15 @@ selection_received (GtkWidget *invisible,
{
char *comp_str;
icalcomponent *icalcomp;
- time_t dtstart;
- struct icaltimetype itime;
icalcomponent_kind kind;
CalComponent *comp;
- char *uid;
+ time_t selected_time;
+ struct icaltimetype itime;
+ struct icaltimetype tmp_itime;
time_t tt_start, tt_end;
struct icaldurationtype ic_dur;
+ char *uid;
+ CalComponentDateTime ccdt;
g_return_if_fail (E_IS_WEEK_VIEW (week_view));
@@ -3885,10 +3887,9 @@ selection_received (GtkWidget *invisible,
}
e_week_view_set_status_message (week_view, _("Updating objects"));
- dtstart = week_view->day_starts[week_view->selection_start_day];
+ selected_time = week_view->day_starts[week_view->selection_start_day];
if (kind == ICAL_VCALENDAR_COMPONENT) {
- int num_found = 0;
icalcomponent_kind child_kind;
icalcomponent *subcomp;
@@ -3899,59 +3900,79 @@ selection_received (GtkWidget *invisible,
if (child_kind == ICAL_VEVENT_COMPONENT ||
child_kind == ICAL_VTODO_COMPONENT ||
child_kind == ICAL_VJOURNAL_COMPONENT) {
- CalComponent *tmp_comp;
+ icalcomponent *new_icalcomp;
+
+ new_icalcomp = icalcomponent_new_clone (subcomp);
+ comp = cal_component_new ();
- tt_start = icaltime_as_timet (icalcomponent_get_dtstart (subcomp));
- tt_end = icaltime_as_timet (icalcomponent_get_dtend (subcomp));
+ /* change the day for the event */
+ tt_start = icaltime_as_timet (
+ icalcomponent_get_dtstart (new_icalcomp));
+ tt_end = icaltime_as_timet (
+ icalcomponent_get_dtend (new_icalcomp));
ic_dur = icaldurationtype_from_int (tt_end - tt_start);
- itime = icaltime_from_timet_with_zone (dtstart, FALSE, week_view->zone);
- /* FIXME: Need to set TZID. */
- icalcomponent_set_dtstart (icalcomp, itime);
+
+ tmp_itime = icaltime_from_timet_with_zone (
+ selected_time, FALSE, week_view->zone);
+ itime = icalcomponent_get_dtstart (new_icalcomp);
+ itime.year = tmp_itime.year;
+ itime.month = tmp_itime.month;
+ itime.day = tmp_itime.day;
+
+ cal_component_set_icalcomponent (comp, new_icalcomp);
+ ccdt.value = &itime;
+ ccdt.tzid = icaltimezone_get_tzid (week_view->zone);
+ cal_component_set_dtstart (comp, &ccdt);
+
itime = icaltime_add (itime, ic_dur);
- icalcomponent_set_dtend (icalcomp, itime);
+ ccdt.value = &itime;
+ cal_component_set_dtend (comp, &ccdt);
uid = cal_component_gen_uid ();
- tmp_comp = cal_component_new ();
- cal_component_set_icalcomponent (
- tmp_comp, icalcomponent_new_clone (subcomp));
- cal_component_set_uid (tmp_comp, uid);
+ cal_component_set_uid (comp, uid);
- free (uid);
- gtk_object_unref (GTK_OBJECT (tmp_comp));
+ cal_client_update_object (week_view->client, comp);
- num_found++;
+ g_free (uid);
+ gtk_object_unref (GTK_OBJECT (comp));
}
subcomp = icalcomponent_get_next_component (
icalcomp, ICAL_ANY_COMPONENT);
}
- if (num_found) {
- comp = cal_component_new ();
- cal_component_set_icalcomponent (comp, icalcomp);
-
- cal_client_update_object (week_view->client, comp);
+ icalcomponent_free (icalcomp);
- gtk_object_unref (GTK_OBJECT (comp));
- }
}
else {
+ comp = cal_component_new ();
+
+ /* change the day for the event */
tt_start = icaltime_as_timet (icalcomponent_get_dtstart (icalcomp));
tt_end = icaltime_as_timet (icalcomponent_get_dtend (icalcomp));
ic_dur = icaldurationtype_from_int (tt_end - tt_start);
- itime = icaltime_from_timet_with_zone (dtstart, FALSE, week_view->zone);
- /* FIXME: need to set TZID */
- icalcomponent_set_dtstart (icalcomp, itime);
- itime = icaltime_add (itime, ic_dur);
- icalcomponent_set_dtend (icalcomp, itime);
- comp = cal_component_new ();
+ tmp_itime = icaltime_from_timet_with_zone (
+ selected_time, FALSE, week_view->zone);
+ itime = icalcomponent_get_dtstart (icalcomp);
+ itime.year = tmp_itime.year;
+ itime.month = tmp_itime.month;
+ itime.day = tmp_itime.day;
+
cal_component_set_icalcomponent (comp, icalcomp);
+ ccdt.value = &itime;
+ ccdt.tzid = icaltimezone_get_tzid (week_view->zone);
+ cal_component_set_dtstart (comp, &ccdt);
+
+ itime = icaltime_add (itime, ic_dur);
+ ccdt.value = &itime;
+ cal_component_set_dtend (comp, &ccdt);
+
uid = cal_component_gen_uid ();
cal_component_set_uid (comp, (const char *) uid);
- free (uid);
cal_client_update_object (week_view->client, comp);
+ g_free (uid);
gtk_object_unref (GTK_OBJECT (comp));
}