aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-day-view.c
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo@ximian.com>2003-07-25 00:02:54 +0800
committerRodrigo Moya <rodrigo@src.gnome.org>2003-07-25 00:02:54 +0800
commitef14a8c5a5049749c22e991da83225e04ab1df02 (patch)
treea76532e1afce69c22142cb1ff4807f9230d5b0bd /calendar/gui/e-day-view.c
parent3f060f07b401bad248daab957bbc79a6d21afb6c (diff)
downloadgsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar
gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar.gz
gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar.bz2
gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar.lz
gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar.xz
gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.tar.zst
gsoc2013-evolution-ef14a8c5a5049749c22e991da83225e04ab1df02.zip
new function. (e_cal_view_get_timezone, e_cal_view_set_timezone): new
2003-07-24 Rodrigo Moya <rodrigo@ximian.com> * gui/e-cal-view.[ch] (e_cal_view_delete_selected_occurrence): new function. (e_cal_view_get_timezone, e_cal_view_set_timezone): new functions. (e_cal_view_class_init): added new class' signal. * gui/e-week-view.[ch] (e_week_view_delete_occurrence, e_week_view_delete_occurrence_internal): removed. (e_week_view_get_timezone): removed. (e_week_view_set_timezone): renamed to timezone_changed_cb, as the callback for timezone changes in the parent ECalView. (e_week_view_on_button_press): call gnome_calendar_new_appointment instead of the non-existant e_week_view_new_appointment. * gui/e-day-view.[ch] (e_day_view_delete_occurrence, e_day_view_delete_occurrence_internal): removed. (e_day_view_get_timezone): removed. (e_day_view_set_timezone): renamed to timezone_changed_cb, as the callback for timezone changes in the parent ECalView. * gui/gnome-cal.c (gnome_calendar_delete_selected_occurrence): made it call e_cal_view_delete_selected_occurrence. (gnome_calendar_update_config_settings): call the generic e_cal_view_set_timezone on all view widgets. * gui/e-day-view-top-item.c: * gui/e-week-view-main-item.c: * gui/e-day-view-main-item.c: removed mentions to non-existant structure fields. svn path=/trunk/; revision=21948
Diffstat (limited to 'calendar/gui/e-day-view.c')
-rw-r--r--calendar/gui/e-day-view.c187
1 files changed, 60 insertions, 127 deletions
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 38642ec8eb..b7979c7bbd 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -476,6 +476,31 @@ e_day_view_class_init (EDayViewClass *class)
}
static void
+timezone_changed_cb (ECalView *cal_view, icaltimezone *old_zone,
+ icaltimezone *new_zone, gpointer user_data)
+{
+ struct icaltimetype tt;
+ time_t lower;
+ EDayView *day_view = (EDayView *) cal_view;
+
+ g_return_if_fail (E_IS_DAY_VIEW (day_view));
+
+ /* If our time hasn't been set yet, just return. */
+ if (day_view->lower == 0 && day_view->upper == 0)
+ return;
+
+ /* Recalculate the new start of the first day. We just use exactly
+ the same time, but with the new timezone. */
+ tt = icaltime_from_timet_with_zone (day_view->lower, FALSE,
+ old_zone);
+
+ lower = icaltime_as_timet_with_zone (tt, new_zone);
+
+ e_day_view_recalc_day_starts (day_view, lower);
+ e_day_view_update_query (day_view);
+}
+
+static void
e_day_view_init (EDayView *day_view)
{
gint day;
@@ -508,8 +533,6 @@ e_day_view_init (EDayView *day_view)
day_view->work_week_view = FALSE;
day_view->days_shown = 1;
- day_view->zone = NULL;
-
day_view->mins_per_row = 30;
day_view->date_format = E_DAY_VIEW_DATE_FULL;
day_view->rows_in_top_display = 0;
@@ -790,6 +813,10 @@ e_day_view_init (EDayView *day_view)
GTK_DEST_DEFAULT_ALL,
target_table, n_targets,
GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK);
+
+ /* connect to ECalView's signals */
+ g_signal_connect (G_OBJECT (day_view), "timezone_changed",
+ G_CALLBACK (timezone_changed_cb), NULL);
}
@@ -1477,7 +1504,7 @@ query_obj_updated_cb (CalQuery *query, const char *uid,
e_day_view_add_event, day_view,
cal_client_resolve_tzid_cb,
e_cal_view_get_cal_client (E_CAL_VIEW (day_view)),
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
g_object_unref (comp);
e_day_view_queue_layout (day_view);
@@ -1971,7 +1998,7 @@ e_day_view_set_selected_time_range (EDayView *day_view,
start of the day given by start_time, otherwise it is the previous
work-week start day. */
if (!day_view->work_week_view) {
- lower = time_day_begin_with_zone (start_time, day_view->zone);
+ lower = time_day_begin_with_zone (start_time, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
} else {
lower = e_day_view_find_work_week_start (day_view, start_time);
}
@@ -2138,7 +2165,7 @@ e_day_view_find_work_week_start (EDayView *day_view,
guint offset;
struct icaltimetype tt = icaltime_null_time ();
- time_to_gdate_with_zone (&date, start_time, day_view->zone);
+ time_to_gdate_with_zone (&date, start_time, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
/* The start of the work-week is the first working day after the
week start day. */
@@ -2169,7 +2196,7 @@ e_day_view_find_work_week_start (EDayView *day_view,
tt.month = g_date_month (&date);
tt.day = g_date_day (&date);
- return icaltime_as_timet_with_zone (tt, day_view->zone);
+ return icaltime_as_timet_with_zone (tt, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
}
@@ -2236,7 +2263,7 @@ e_day_view_recalc_day_starts (EDayView *day_view,
day_view->day_starts[0] = start_time;
for (day = 1; day <= day_view->days_shown; day++) {
- day_view->day_starts[day] = time_add_day_with_zone (day_view->day_starts[day - 1], 1, day_view->zone);
+ day_view->day_starts[day] = time_add_day_with_zone (day_view->day_starts[day - 1], 1, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
}
#if 0
@@ -2519,49 +2546,6 @@ e_day_view_set_show_event_end_times (EDayView *day_view,
}
}
-
-/* The current timezone. */
-icaltimezone*
-e_day_view_get_timezone (EDayView *day_view)
-{
- g_return_val_if_fail (E_IS_DAY_VIEW (day_view), NULL);
-
- return day_view->zone;
-}
-
-
-void
-e_day_view_set_timezone (EDayView *day_view,
- icaltimezone *zone)
-{
- icaltimezone *old_zone;
- struct icaltimetype tt;
- time_t lower;
-
- g_return_if_fail (E_IS_DAY_VIEW (day_view));
-
- old_zone = day_view->zone;
- if (old_zone == zone)
- return;
-
- day_view->zone = zone;
-
- /* If our time hasn't been set yet, just return. */
- if (day_view->lower == 0 && day_view->upper == 0)
- return;
-
- /* Recalculate the new start of the first day. We just use exactly
- the same time, but with the new timezone. */
- tt = icaltime_from_timet_with_zone (day_view->lower, FALSE,
- old_zone);
-
- lower = icaltime_as_timet_with_zone (tt, zone);
-
- e_day_view_recalc_day_starts (day_view, lower);
- e_day_view_update_query (day_view);
-}
-
-
/* This is a callback used to update all day event labels. */
static gboolean
e_day_view_set_show_times_cb (EDayView *day_view,
@@ -3459,57 +3443,6 @@ e_day_view_on_event_right_click (EDayView *day_view,
day, event_num);
}
-static void
-e_day_view_delete_occurrence_internal (EDayView *day_view, EDayViewEvent *event)
-{
- CalComponent *comp;
-
- if (cal_component_is_instance (event->comp)) {
- const char *uid;
-
- cal_component_get_uid (event->comp, &uid);
-
- delete_error_dialog (
- cal_client_remove_object_with_mod (e_cal_view_get_cal_client (E_CAL_VIEW (day_view)),
- uid, CALOBJ_MOD_THIS),
- CAL_COMPONENT_EVENT);
- return;
- }
-
- /* We must duplicate the CalComponent, or we won't know it has changed
- when we get the "update_event" callback. */
- comp = cal_component_clone (event->comp);
- cal_comp_util_add_exdate (comp, event->start, day_view->zone);
-
- if (cal_client_update_object (e_cal_view_get_cal_client (E_CAL_VIEW (day_view)), comp)
- != CAL_CLIENT_RESULT_SUCCESS)
- g_message ("e_day_view_on_delete_occurrence(): Could not update the object!");
-
- g_object_unref (comp);
-}
-
-void
-e_day_view_delete_occurrence (EDayView *day_view)
-{
- EDayViewEvent *event;
-
- g_return_if_fail (E_IS_DAY_VIEW (day_view));
-
- if (day_view->editing_event_day == -1)
- return;
-
- if (day_view->editing_event_day == E_DAY_VIEW_LONG_EVENT)
- event = &g_array_index (day_view->long_events,
- EDayViewEvent,
- day_view->editing_event_num);
- else
- event = &g_array_index (day_view->events[day_view->editing_event_day],
- EDayViewEvent,
- day_view->editing_event_num);
-
- e_day_view_delete_occurrence_internal (day_view, event);
-}
-
void
e_day_view_unrecur_appointment (EDayView *day_view)
{
@@ -3529,7 +3462,7 @@ e_day_view_unrecur_appointment (EDayView *day_view)
instance. */
comp = cal_component_clone (event->comp);
- cal_comp_util_add_exdate (comp, event->start, day_view->zone);
+ cal_comp_util_add_exdate (comp, event->start, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
/* For the unrecurred instance we duplicate the original object,
create a new uid for it, get rid of the recurrence rules, and set
@@ -3542,13 +3475,13 @@ e_day_view_unrecur_appointment (EDayView *day_view)
cal_component_set_exrule_list (new_comp, NULL);
date.value = &itt;
- date.tzid = icaltimezone_get_tzid (day_view->zone);
+ date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
*date.value = icaltime_from_timet_with_zone (event->start, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtstart (new_comp, &date);
*date.value = icaltime_from_timet_with_zone (event->end, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtend (new_comp, &date);
@@ -4078,17 +4011,17 @@ e_day_view_finish_long_event_resize (EDayView *day_view)
date.value = &itt;
/* FIXME: Should probably keep the timezone of the original start
and end times. */
- date.tzid = icaltimezone_get_tzid (day_view->zone);
+ date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
if (day_view->resize_drag_pos == E_CAL_VIEW_POS_LEFT_EDGE) {
dt = day_view->day_starts[day_view->resize_start_row];
*date.value = icaltime_from_timet_with_zone (dt, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtstart (comp, &date);
} else {
dt = day_view->day_starts[day_view->resize_end_row + 1];
*date.value = icaltime_from_timet_with_zone (dt, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtend (comp, &date);
}
@@ -4152,17 +4085,17 @@ e_day_view_finish_resize (EDayView *day_view)
date.value = &itt;
/* FIXME: Should probably keep the timezone of the original start
and end times. */
- date.tzid = icaltimezone_get_tzid (day_view->zone);
+ date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
if (day_view->resize_drag_pos == E_CAL_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,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtstart (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,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtend (comp, &date);
}
@@ -4307,9 +4240,9 @@ e_day_view_add_event (CalComponent *comp,
g_return_val_if_fail (end > day_view->lower, TRUE);
start_tt = icaltime_from_timet_with_zone (start, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
end_tt = icaltime_from_timet_with_zone (end, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
event.comp = comp;
g_object_ref (comp);
@@ -4329,7 +4262,7 @@ e_day_view_add_event (CalComponent *comp,
event.different_timezone = FALSE;
if (!cal_comp_util_compare_event_timezones (comp, e_cal_view_get_cal_client (E_CAL_VIEW (day_view)),
- day_view->zone))
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view))))
event.different_timezone = TRUE;
/* Find out which array to add the event to. */
@@ -4954,17 +4887,17 @@ e_day_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
e_day_view_get_selected_time_range (day_view, &dtstart, &dtend);
start_tt = icaltime_from_timet_with_zone (dtstart, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
end_tt = icaltime_from_timet_with_zone (dtend, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
if (day_view->selection_in_top_canvas) {
start_dt.tzid = NULL;
start_tt.is_date = 1;
end_tt.is_date = 1;
} else {
- start_dt.tzid = icaltimezone_get_tzid (day_view->zone);
+ start_dt.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
}
start_dt.value = &start_tt;
@@ -5866,12 +5799,12 @@ e_day_view_convert_grid_position_to_time (EDayView *day_view,
/* Create an icaltimetype and convert to a time_t. */
tt = icaltime_from_timet_with_zone (day_view->day_starts[col],
- FALSE, day_view->zone);
+ FALSE, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
tt.hour = minutes / 60;
tt.minute = minutes % 60;
tt.second = 0;
- val = icaltime_as_timet_with_zone (tt, day_view->zone);
+ val = icaltime_as_timet_with_zone (tt, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
return val;
}
@@ -5901,7 +5834,7 @@ e_day_view_convert_time_to_grid_position (EDayView *day_view,
/* To find the row we need to convert the time to an icaltimetype,
calculate the offset in minutes from the top of the display and
divide it by the mins per row setting. */
- tt = icaltime_from_timet_with_zone (time, FALSE, day_view->zone);
+ tt = icaltime_from_timet_with_zone (time, FALSE, e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
minutes = tt.hour * 60 + tt.minute;
minutes -= day_view->first_hour_shown * 60 + day_view->first_minute_shown;
@@ -6890,14 +6823,14 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget,
dt = day_view->day_starts[day] + start_offset * 60;
itt = icaltime_from_timet_with_zone (dt, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
if (all_day_event) {
itt.is_date = TRUE;
date.tzid = NULL;
} else {
/* FIXME: Should probably keep the timezone of
the original start and end times. */
- date.tzid = icaltimezone_get_tzid (day_view->zone);
+ date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
}
cal_component_set_dtstart (comp, &date);
@@ -6906,14 +6839,14 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget,
else
dt = day_view->day_starts[day + num_days - 1] + end_offset * 60;
itt = icaltime_from_timet_with_zone (dt, FALSE,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
if (all_day_event) {
itt.is_date = TRUE;
date.tzid = NULL;
} else {
/* FIXME: Should probably keep the timezone of
the original start and end times. */
- date.tzid = icaltimezone_get_tzid (day_view->zone);
+ date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
}
cal_component_set_dtend (comp, &date);
@@ -7040,15 +6973,15 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget,
comp = cal_component_clone (event->comp);
date.value = &itt;
- date.tzid = icaltimezone_get_tzid (day_view->zone);
+ date.tzid = icaltimezone_get_tzid (e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
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,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtstart (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,
- day_view->zone);
+ e_cal_view_get_timezone (E_CAL_VIEW (day_view)));
cal_component_set_dtend (comp, &date);
gtk_drag_finish (context, TRUE, TRUE, time);