evolution r37079 - in trunk/calendar: . gui



Author: mcrha
Date: Thu Jan 15 14:48:21 2009
New Revision: 37079
URL: http://svn.gnome.org/viewvc/evolution?rev=37079&view=rev

Log:
2009-01-15  Milan Crha  <mcrha redhat com>

	** Fix for bug #245156

	* gui/e-day-view.c: (e_day_view_finish_long_event_resize),
	(e_day_view_finish_resize), (e_day_view_change_event_time),
	(e_day_view_on_top_canvas_drag_data_received),
	(e_day_view_on_main_canvas_drag_data_received):
	* gui/e-week-view.c: (e_week_view_change_event_time):
	* gui/e-calendar-view.c: (on_unrecur_appointment):
	Keep old timezone for dtstart/dtend when changing it.
	* gui/comp-util.h: (cal_comp_set_dtstart_with_oldzone),
	(cal_comp_set_dtend_with_oldzone):
	* gui/comp-util.c: (cal_comp_set_dtstart_with_oldzone),
	(cal_comp_set_dtend_with_oldzone), (datetime_to_zone):
	Helper functions to make it easier.



Modified:
   trunk/calendar/ChangeLog
   trunk/calendar/gui/comp-util.c
   trunk/calendar/gui/comp-util.h
   trunk/calendar/gui/e-calendar-view.c
   trunk/calendar/gui/e-day-view.c
   trunk/calendar/gui/e-week-view.c

Modified: trunk/calendar/gui/comp-util.c
==============================================================================
--- trunk/calendar/gui/comp-util.c	(original)
+++ trunk/calendar/gui/comp-util.c	Thu Jan 15 14:48:21 2009
@@ -530,3 +530,80 @@
 
 	return list;
 }
+
+static void
+datetime_to_zone (ECal *client, ECalComponentDateTime *date, const char *tzid)
+{
+	icaltimezone *from, *to;
+
+	g_return_if_fail (date != NULL);
+
+	if (date->tzid == NULL || tzid == NULL ||
+	    date->tzid == tzid || g_str_equal (date->tzid, tzid))
+		return;
+
+	from = icaltimezone_get_builtin_timezone_from_tzid (date->tzid);
+	if (!from) {
+		if (!e_cal_get_timezone (client, date->tzid, &from, NULL))
+			g_warning ("%s: Could not get timezone from server: %s", G_STRFUNC, date->tzid ? date->tzid : "");
+	}
+
+	to = icaltimezone_get_builtin_timezone_from_tzid (tzid);
+	if (!to) {
+		/* do not check failure here, maybe the zone is not available there */
+		e_cal_get_timezone (client, tzid, &to, NULL);
+	}
+
+	icaltimezone_convert_time (date->value, from, to);
+	date->tzid = tzid;
+}
+
+/**
+ * cal_comp_set_dtstart_with_oldzone:
+ * Changes 'dtstart' of the component, but converts time to the old timezone.
+ * @param client ECal structure, to retrieve timezone from, when required.
+ * @param comp Component, where make the change.
+ * @param pdate Value, to change to.
+ **/
+void
+cal_comp_set_dtstart_with_oldzone (ECal *client, ECalComponent *comp, const ECalComponentDateTime *pdate)
+{
+	ECalComponentDateTime olddate, date;
+
+	g_return_if_fail (comp != NULL);
+	g_return_if_fail (pdate != NULL);
+
+	e_cal_component_get_dtstart (comp, &olddate);
+
+	date = *pdate;
+
+	datetime_to_zone (client, &date, olddate.tzid);
+	e_cal_component_set_dtstart (comp, &date);
+
+	e_cal_component_free_datetime (&olddate);
+}
+
+/**
+ * cal_comp_set_dtend_with_oldzone:
+ * Changes 'dtend' of the component, but converts time to the old timezone.
+ * @param client ECal structure, to retrieve timezone from, when required.
+ * @param comp Component, where make the change.
+ * @param pdate Value, to change to.
+ **/
+void
+cal_comp_set_dtend_with_oldzone (ECal *client, ECalComponent *comp, const ECalComponentDateTime *pdate)
+{
+	ECalComponentDateTime olddate, date;
+
+	g_return_if_fail (comp != NULL);
+	g_return_if_fail (pdate != NULL);
+
+	e_cal_component_get_dtend (comp, &olddate);
+
+	date = *pdate;
+
+	datetime_to_zone (client, &date, olddate.tzid);
+	e_cal_component_set_dtend (comp, &date);
+
+	e_cal_component_free_datetime (&olddate);
+}

Modified: trunk/calendar/gui/comp-util.h
==============================================================================
--- trunk/calendar/gui/comp-util.h	(original)
+++ trunk/calendar/gui/comp-util.h	Thu Jan 15 14:48:21 2009
@@ -54,4 +54,7 @@
 void    cal_comp_selection_set_string_list (GtkSelectionData *data, GSList *str_list);
 GSList *cal_comp_selection_get_string_list (GtkSelectionData *data);
 
+void cal_comp_set_dtstart_with_oldzone (ECal *client, ECalComponent *comp, const ECalComponentDateTime *pdate);
+void cal_comp_set_dtend_with_oldzone (ECal *client, ECalComponent *comp, const ECalComponentDateTime *pdate);
+
 #endif

Modified: trunk/calendar/gui/e-calendar-view.c
==============================================================================
--- trunk/calendar/gui/e-calendar-view.c	(original)
+++ trunk/calendar/gui/e-calendar-view.c	Thu Jan 15 14:48:21 2009
@@ -1663,10 +1663,10 @@
 
 	*date.value = icaltime_from_timet_with_zone (event->comp_data->instance_start, FALSE,
 						     e_calendar_view_get_timezone (cal_view));
-	e_cal_component_set_dtstart (new_comp, &date);
+	cal_comp_set_dtstart_with_oldzone (client, new_comp, &date);
 	*date.value = icaltime_from_timet_with_zone (event->comp_data->instance_end, FALSE,
 						     e_calendar_view_get_timezone (cal_view));
-	e_cal_component_set_dtend (new_comp, &date);
+	cal_comp_set_dtend_with_oldzone (client, new_comp, &date);
 	e_cal_component_commit_sequence (new_comp);
 
 	/* Now update both ECalComponents. Note that we do this last since at

Modified: trunk/calendar/gui/e-day-view.c
==============================================================================
--- trunk/calendar/gui/e-day-view.c	(original)
+++ trunk/calendar/gui/e-day-view.c	Thu Jan 15 14:48:21 2009
@@ -3941,7 +3941,7 @@
 		dt = day_view->day_starts[day_view->resize_start_row];
 		*date.value = icaltime_from_timet_with_zone (dt, is_date,
 							     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-		e_cal_component_set_dtstart (comp, &date);
+		cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 		e_cal_component_free_datetime (&ecdt);
 		date.tzid = NULL; /* do not reuse it later */
 	} else {
@@ -3954,7 +3954,7 @@
 		dt = day_view->day_starts[day_view->resize_end_row + 1];
 		*date.value = icaltime_from_timet_with_zone (dt, is_date,
 							     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-		e_cal_component_set_dtend (comp, &date);
+		cal_comp_set_dtend_with_oldzone (client, comp, &date);
 		e_cal_component_free_datetime (&ecdt);
 		date.tzid = NULL; /* do not reuse it later */
 	}
@@ -3972,12 +3972,12 @@
 				*date.value = icaltime_from_timet_with_zone (
 					event->comp_data->instance_end, FALSE,
 					e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-				e_cal_component_set_dtend (comp, &date);
+				cal_comp_set_dtend_with_oldzone (client, comp, &date);
 			} else {
 				*date.value = icaltime_from_timet_with_zone (
 					event->comp_data->instance_start, FALSE,
 					e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-				e_cal_component_set_dtstart (comp, &date);
+				cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 			}
 
 			e_cal_component_set_rdate_list (comp, NULL);
@@ -4037,20 +4037,18 @@
 	}
 
 	date.value = &itt;
-	/* FIXME: Should probably keep the timezone of the original start
-	   and end times. */
 	date.tzid = icaltimezone_get_tzid (e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
 
 	if (day_view->resize_drag_pos == E_CALENDAR_VIEW_POS_TOP_EDGE) {
 		dt = e_day_view_convert_grid_position_to_time (day_view, day, day_view->resize_start_row);
 		*date.value = icaltime_from_timet_with_zone (dt, FALSE,
 							     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-		e_cal_component_set_dtstart (comp, &date);
+		cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 	} else {
 		dt = e_day_view_convert_grid_position_to_time (day_view, day, day_view->resize_end_row + 1);
 		*date.value = icaltime_from_timet_with_zone (dt, FALSE,
 							     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-		e_cal_component_set_dtend (comp, &date);
+		cal_comp_set_dtend_with_oldzone (client, comp, &date);
 	}
 
 	e_cal_component_commit_sequence (comp);
@@ -4081,12 +4079,12 @@
 				*date.value = icaltime_from_timet_with_zone (
 					event->comp_data->instance_end, FALSE,
 					e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-				e_cal_component_set_dtend (comp, &date);
+				cal_comp_set_dtend_with_oldzone (client, comp, &date);
 			} else {
 				*date.value = icaltime_from_timet_with_zone (
 					event->comp_data->instance_start, FALSE,
 					e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-				e_cal_component_set_dtstart (comp, &date);
+				cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 			}
 
 			e_cal_component_set_rdate_list (comp, NULL);
@@ -6057,10 +6055,10 @@
 
 	*date.value = icaltime_from_timet_with_zone (start_dt, FALSE,
 						     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-	e_cal_component_set_dtstart (comp, &date);
+	cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 	*date.value = icaltime_from_timet_with_zone (end_dt, FALSE,
 						     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-	e_cal_component_set_dtend (comp, &date);
+	cal_comp_set_dtend_with_oldzone (client, comp, &date);
 
 	e_cal_component_commit_sequence (comp);
 
@@ -7431,7 +7429,7 @@
 				   the original start and end times. */
 				date.tzid = icaltimezone_get_tzid (e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
 			}
-			e_cal_component_set_dtstart (comp, &date);
+			cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 
 			if (end_offset == 0)
 				dt = day_view->day_starts[day + num_days];
@@ -7447,7 +7445,7 @@
 				   the original start and end times. */
 				date.tzid = icaltimezone_get_tzid (e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
 			}
-			e_cal_component_set_dtend (comp, &date);
+			cal_comp_set_dtend_with_oldzone (client, comp, &date);
 
 			gtk_drag_finish (context, TRUE, TRUE, time);
 
@@ -7644,11 +7642,11 @@
 			dt = e_day_view_convert_grid_position_to_time (day_view, day, row) + start_offset * 60;
 			*date.value = icaltime_from_timet_with_zone (dt, FALSE,
 								     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-			e_cal_component_set_dtstart (comp, &date);
+			cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 			dt = e_day_view_convert_grid_position_to_time (day_view, day, row + num_rows) - end_offset * 60;
 			*date.value = icaltime_from_timet_with_zone (dt, FALSE,
 								     e_calendar_view_get_timezone (E_CALENDAR_VIEW (day_view)));
-			e_cal_component_set_dtend (comp, &date);
+			cal_comp_set_dtend_with_oldzone (client, comp, &date);
 			e_cal_component_abort_sequence (comp);
 
 			gtk_drag_finish (context, TRUE, TRUE, time);

Modified: trunk/calendar/gui/e-week-view.c
==============================================================================
--- trunk/calendar/gui/e-week-view.c	(original)
+++ trunk/calendar/gui/e-week-view.c	Thu Jan 15 14:48:21 2009
@@ -3431,10 +3431,10 @@
 
 	*date.value = icaltime_from_timet_with_zone (start_dt, is_all_day,
 						     e_calendar_view_get_timezone (E_CALENDAR_VIEW (week_view)));
-	e_cal_component_set_dtstart (comp, &date);
+	cal_comp_set_dtstart_with_oldzone (client, comp, &date);
 	*date.value = icaltime_from_timet_with_zone (end_dt, is_all_day,
 						     e_calendar_view_get_timezone (E_CALENDAR_VIEW (week_view)));
-	e_cal_component_set_dtend (comp, &date);
+	cal_comp_set_dtend_with_oldzone (client, comp, &date);
 
 	e_cal_component_commit_sequence (comp);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]