Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/calendar/ChangeLog,v
retrieving revision 1.3028
diff -u -p -r1.3028 ChangeLog
--- ChangeLog	10 Apr 2006 10:12:33 -0000	1.3028
+++ ChangeLog	20 Apr 2006 07:13:51 -0000
@@ -1,3 +1,11 @@
+2006-04-20  Chenthill Palanisamy  <pchenthill@novell.com>
+
+	Fixes #317422
+	* gui/e-cal-model.c: (e_cal_model_set_instance_times):
+	* gui/e-calendar-view.c: (get_label),
+	(e_calendar_view_get_tooltips): Get the timezone from the backend
+	using the tzid if its not present in the icalcomponent.
+
 2006-04-10  Chenthill Palanisamy  <pchenthill@novell.com>
 
 	Fixes #163039
Index: gui/e-cal-model.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-cal-model.c,v
retrieving revision 1.73
diff -u -p -r1.73 e-cal-model.c
--- gui/e-cal-model.c	4 Apr 2006 02:42:59 -0000	1.73
+++ gui/e-cal-model.c	20 Apr 2006 07:13:52 -0000
@@ -2107,6 +2107,27 @@ e_cal_model_set_instance_times (ECalMode
 
 	if (start_time.zone)
 		zone = start_time.zone;
+	else {
+		icalparameter *param = NULL;
+		icalproperty *prop = icalcomponent_get_first_property (comp_data->icalcomp, ICAL_DTSTART_PROPERTY);
+		
+		
+	       if (prop)	{
+			param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
+
+			if (param) {
+				const char *tzid = NULL;
+				icaltimezone *st_zone = NULL;
+
+				tzid = icalparameter_get_tzid (param);
+
+				e_cal_get_timezone (comp_data->client, tzid, &st_zone, NULL);
+
+				if (st_zone)
+					zone = st_zone;
+			}
+	       }
+	}
 	
 	comp_data->instance_start = icaltime_as_timet_with_zone (start_time, zone);
 
Index: gui/e-calendar-view.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-calendar-view.c,v
retrieving revision 1.118
diff -u -p -r1.118 e-calendar-view.c
--- gui/e-calendar-view.c	3 Apr 2006 08:36:50 -0000	1.118
+++ gui/e-calendar-view.c	20 Apr 2006 07:13:53 -0000
@@ -2054,12 +2054,12 @@ tooltip_grab (GtkWidget *tooltip, GdkEve
 }
 
 static char *
-get_label (struct icaltimetype *tt)
+get_label (struct icaltimetype *tt, icaltimezone *f_zone, icaltimezone *t_zone)
 {
         char buffer[1000];
         struct tm tmp_tm;
 
-	tmp_tm = icaltimetype_to_tm (tt);
+	tmp_tm = icaltimetype_to_tm_with_zone (tt, f_zone, t_zone);
         e_time_format_date_and_time (&tmp_tm,
                                      calendar_config_get_24_hour_format (),
                                      FALSE, FALSE,
@@ -2091,13 +2091,16 @@ e_calendar_view_get_tooltips (ECalendarV
 	GtkStyle *style = gtk_widget_get_default_style ();
 	GtkWidget *widget = (GtkWidget *) g_object_get_data (G_OBJECT (data->cal_view), "tooltip-window");
 	ECalComponent *newcomp = e_cal_component_new ();
-	icaltimezone *zone;	
+	icaltimezone *zone, *default_zone;	
+	ECal *client = NULL;
 
 	/* Delete any stray tooltip if left */
 	if (widget)
 		gtk_widget_destroy (widget);
 
 	pevent = data->get_view_event (data->cal_view, data->day, data->event_num);
+	client = pevent->comp_data->client;
+	default_zone = e_calendar_view_get_timezone  (data->cal_view);
 
 	clone_comp = icalcomponent_new_clone (pevent->comp_data->icalcomp);
 	if (!e_cal_component_set_icalcomponent (newcomp, clone_comp))
@@ -2173,19 +2176,19 @@ e_calendar_view_get_tooltips (ECalendarV
 			
 	if (dtstart.tzid) {
 		zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (newcomp), dtstart.tzid);
-	} else {
-		zone = NULL;
-	}
-	t_start = icaltime_as_timet_with_zone (*dtstart.value, zone);
+		if (!zone) 
+			e_cal_get_timezone (client, dtstart.tzid, &zone, NULL);
+
+		if (!zone)
+			zone = default_zone;
 		
-	if (dtend.tzid) {
-		zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (newcomp), dtend.tzid);
 	} else {
 		zone = NULL;
 	}
+	t_start = icaltime_as_timet_with_zone (*dtstart.value, zone);
 	t_end = icaltime_as_timet_with_zone (*dtend.value, zone);
 		
-	tmp1 = get_label(dtstart.value);
+	tmp1 = get_label(dtstart.value, zone, default_zone);
 	tmp = calculate_time (t_start, t_end);
 	
 	/* To Translators: It will display "Time: ActualStartDateAndTime (DurationOfTheMeeting)"*/
