diff options
author | Damon Chaplin <damon@ximian.com> | 2001-10-23 08:23:42 +0800 |
---|---|---|
committer | Damon Chaplin <damon@src.gnome.org> | 2001-10-23 08:23:42 +0800 |
commit | 04bda8ad1e0cb676d711dbf0f22ff9f4fb615891 (patch) | |
tree | 7f1ff1303c52e9b48a0006c500b204902b9d77c5 /calendar/gui/e-day-view.c | |
parent | 68de308a89a844dcc579e1d9f24d7813d645c956 (diff) | |
download | gsoc2013-evolution-04bda8ad1e0cb676d711dbf0f22ff9f4fb615891.tar.gz gsoc2013-evolution-04bda8ad1e0cb676d711dbf0f22ff9f4fb615891.tar.zst gsoc2013-evolution-04bda8ad1e0cb676d711dbf0f22ff9f4fb615891.zip |
added setDefaultTimezone() method.
2001-10-22 Damon Chaplin <damon@ximian.com>
* idl/evolution-calendar.idl: added setDefaultTimezone() method.
* pcs/cal-backend.c (cal_backend_get_default_timezone):
(cal_backend_set_default_timezone): new functions to call class
methods.
* pcs/cal-backend-file.c: lots of changes to handle the default
timezone and use it.
* pcs/query.c: use the default timezone.
* gui/dialogs/task-details-page.c (date_changed_cb): initialized
completed_tt.
* gui/dialogs/event-page.c: changed it to handle DATE values. The
'All Day Event' checkbox is only set now when the DTSTART and DTEND
are DATE values.
* gui/dialogs/comp-editor-util.c (comp_editor_free_dates): free the
CalComponentDateTime structs as well.
* gui/e-tasks.c: set the default timezone on the server.
* gui/tag-calendar.c:
* gui/gnome-cal.c:
* gui/e-week-view.c:
* gui/e-day-view.c: updates to handle DATE values.
* gui/e-calendar-table.c (date_compare_cb): updated to use the new
ECellDateEditValue values, so it now works.
(percent_compare_cb): updated to use GPOINTER_TO_INT values.
(e_calendar_table_init): use an ECellPercent for the percent field
and an ECellDateEditText for the date fields.
* gui/comp-util.c (cal_comp_util_compare_event_timezones): return TRUE
if the DTSTART or DTEND is a DATE value. We don't want to show the
timezone icons for DATE values.
* gui/comp-editor-factory.c (resolve_pending_requests): set the default
timezone on the server.
* gui/calendar-model.c: major changes to support sorting properly.
For date and percent fields we now use subclasses of ECellText, so
we don't use a char* as the model value. For the percent field we now
use a GINT_TO_POINTER. For the date fields we now use a
ECellDateEditValue* as the value.
* gui/calendar-config.c (calendar_config_configure_e_cell_date_edit):
set the timezone and use_24_hour flags of the new ECellDateEditText.
* conduits/todo/todo-conduit.c (pre_sync):
* conduits/calendar/calendar-conduit.c (pre_sync): set the default
timezone on the server.
* cal-util/timeutil.c (time_days_in_month): removed debug message.
* cal-util/test-recur.c: try to handle timezones in the iCalendar
file properly, and updated to pass default timezone.
* cal-util/cal-util.c (cal_util_generate_alarms_for_comp):
(cal_util_generate_alarms_for_list): added default timezone argument.
* cal-util/cal-recur.c: changed many of the functions to take a default
timezone, to use to resolve DATE and floating DATE-TIME values.
* cal-client/cal-client.c (cal_client_set_default_timezone): new
function to set the default timezone.
(cal_client_ensure_timezone_on_server): new function to ensure that
a given timezone is on the server.
* gui/e-cell-date-edit-text.c: new subclass of ECellText to display
and edit a date value.
* cal-util/cal-recur.c (cal_obj_byday_expand_monthly): changed week_num
to -week_num when calculating the weeks to go back from the end of the
month for things like BYDAY=-2WE. Fixes bug #11525.
(cal_recur_generate_instances_of_rule): only go up to MAX_YEAR (2037).
We can't really handle anything past that anyway.
(cal_recur_ensure_rule_end_date): initialize cb_date.end_date to 0,
so if the RULE doesn't generate COUNT instances we save 0 as the
time_t.
svn path=/trunk/; revision=13920
Diffstat (limited to 'calendar/gui/e-day-view.c')
-rw-r--r-- | calendar/gui/e-day-view.c | 76 |
1 files changed, 54 insertions, 22 deletions
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index 7aaee07062..a6bd101d46 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -1555,7 +1555,8 @@ query_obj_updated_cb (CalQuery *query, const char *uid, cal_recur_generate_instances (comp, day_view->lower, day_view->upper, e_day_view_add_event, day_view, - cal_client_resolve_tzid_cb, day_view->client); + cal_client_resolve_tzid_cb, day_view->client, + day_view->zone); gtk_object_unref (GTK_OBJECT (comp)); e_day_view_queue_layout (day_view); @@ -5012,8 +5013,8 @@ e_day_view_key_press (GtkWidget *widget, GdkEventKey *event) guint keyval; gboolean stop_emission; time_t dtstart, dtend; - CalComponentDateTime dt; - struct icaltimetype itt; + CalComponentDateTime start_dt, end_dt; + struct icaltimetype start_tt, end_tt; const char *uid; g_return_val_if_fail (widget != NULL, FALSE); @@ -5108,16 +5109,27 @@ e_day_view_key_press (GtkWidget *widget, GdkEventKey *event) e_day_view_get_selected_time_range (day_view, &dtstart, &dtend); - dt.value = &itt; - dt.tzid = icaltimezone_get_tzid (day_view->zone); + start_tt = icaltime_from_timet_with_zone (dtstart, FALSE, + day_view->zone); + + end_tt = icaltime_from_timet_with_zone (dtend, FALSE, + day_view->zone); - *dt.value = icaltime_from_timet_with_zone (dtstart, FALSE, - day_view->zone); - cal_component_set_dtstart (comp, &dt); + if (day_view->selection_in_top_canvas) { + start_dt.tzid = NULL; + start_tt.is_date = 1; + end_tt.is_date = 1; + /* We have to take a day off the end time as it is a DATE. */ + icaltime_adjust (&end_tt, -1, 0, 0, 0); + } else { + start_dt.tzid = icaltimezone_get_tzid (day_view->zone); + } - *dt.value = icaltime_from_timet_with_zone (dtend, FALSE, - day_view->zone); - cal_component_set_dtend (comp, &dt); + start_dt.value = &start_tt; + end_dt.value = &end_tt; + end_dt.tzid = start_dt.tzid; + cal_component_set_dtstart (comp, &start_dt); + cal_component_set_dtend (comp, &end_dt); cal_component_set_categories (comp, day_view->default_category); @@ -6595,6 +6607,7 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, CalComponentDateTime date; struct icaltimetype itt; time_t dt; + gboolean all_day_event; /* Note that we only support DnD within the EDayView at present. */ if ((data->length >= 0) && (data->format == 8) @@ -6606,7 +6619,7 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, const char *uid; num_days = 1; start_offset = 0; - end_offset = -1; + end_offset = 0; if (day_view->drag_event_day == E_DAY_VIEW_LONG_EVENT) { event = &g_array_index (day_view->long_events, EDayViewEvent, @@ -6638,28 +6651,47 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, if (!event_uid || !uid || strcmp (event_uid, uid)) g_warning ("Unexpected event UID"); - /* We use a temporary shallow of the comp since we - don't want to change the original comp here. + /* We clone the event since we don't want to change + the original comp here. Otherwise we would not detect that the event's time had changed in the "update_event" callback. */ comp = cal_component_clone (event->comp); + if (start_offset == 0 && end_offset == 0) + all_day_event = TRUE; + else + all_day_event = FALSE; + date.value = &itt; - /* FIXME: Should probably keep the timezone of the - original start and end times. */ - date.tzid = icaltimezone_get_tzid (day_view->zone); dt = day_view->day_starts[day] + start_offset * 60; - *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + itt = icaltime_from_timet_with_zone (dt, FALSE, + day_view->zone); + 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); + } cal_component_set_dtstart (comp, &date); - if (end_offset == -1 || end_offset == 0) + + if (end_offset == 0) dt = day_view->day_starts[day + num_days]; else dt = day_view->day_starts[day + num_days - 1] + end_offset * 60; - *date.value = icaltime_from_timet_with_zone (dt, FALSE, - day_view->zone); + itt = icaltime_from_timet_with_zone (dt, FALSE, + day_view->zone); + 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); + } cal_component_set_dtend (comp, &date); gtk_drag_finish (context, TRUE, TRUE, time); |