[evolution] Miscellaneous changes for issues overlooked during port to libical-glib



commit f2c79880df92f33a0147c82cfeb0873413f2b80a
Author: Milan Crha <mcrha redhat com>
Date:   Mon May 20 14:25:57 2019 +0200

    Miscellaneous changes for issues overlooked during port to libical-glib

 src/calendar/gui/comp-util.c                    | 38 ++++++++++++++++++++-----
 src/calendar/gui/e-cal-data-model.c             |  8 +++---
 src/calendar/gui/e-cal-model.c                  |  6 ++--
 src/calendar/gui/e-comp-editor-page-reminders.c | 17 ++++-------
 src/calendar/gui/e-day-view-time-item.c         |  5 ++--
 src/calendar/gui/e-meeting-store.c              |  7 +++--
 src/calendar/gui/tag-calendar.c                 |  4 +--
 src/e-util/e-timezone-dialog.c                  |  3 +-
 8 files changed, 56 insertions(+), 32 deletions(-)
---
diff --git a/src/calendar/gui/comp-util.c b/src/calendar/gui/comp-util.c
index dd46876261..00cc7cd089 100644
--- a/src/calendar/gui/comp-util.c
+++ b/src/calendar/gui/comp-util.c
@@ -153,6 +153,8 @@ cal_comp_util_compare_event_timezones (ECalComponent *comp,
                 * we know the timezones are the same so we return TRUE. */
                retval = TRUE;
        } else {
+               gint is_daylight = 0; /* Its value is ignored, but libical-glib 3.0.5 API requires it */
+
                /* If the TZIDs differ, we have to compare the UTC offsets
                 * of the start and end times, using their own timezones and
                 * the given timezone. */
@@ -167,11 +169,11 @@ cal_comp_util_compare_event_timezones (ECalComponent *comp,
                        offset1 = i_cal_timezone_get_utc_offset (
                                start_zone,
                                e_cal_component_datetime_get_value (start_datetime),
-                               NULL);
+                               &is_daylight);
                        offset2 = i_cal_timezone_get_utc_offset (
                                zone,
                                e_cal_component_datetime_get_value (start_datetime),
-                               NULL);
+                               &is_daylight);
                        if (offset1 != offset2)
                                goto out;
                }
@@ -187,11 +189,11 @@ cal_comp_util_compare_event_timezones (ECalComponent *comp,
                        offset1 = i_cal_timezone_get_utc_offset (
                                end_zone,
                                e_cal_component_datetime_get_value (end_datetime),
-                               NULL);
+                               &is_daylight);
                        offset2 = i_cal_timezone_get_utc_offset (
                                zone,
                                e_cal_component_datetime_get_value (end_datetime),
-                               NULL);
+                               &is_daylight);
                        if (offset1 != offset2)
                                goto out;
                }
@@ -859,7 +861,7 @@ cal_comp_get_instance_times (ECalClient *client,
                             GCancellable *cancellable)
 {
        ICalTime *start_time, *end_time;
-       const ICalTimezone *zone = default_zone;
+       const ICalTimezone *zone;
 
        g_return_if_fail (E_IS_CAL_CLIENT (client));
        g_return_if_fail (icomp != NULL);
@@ -876,6 +878,8 @@ cal_comp_get_instance_times (ECalClient *client,
                end_time = i_cal_time_clone (start_time);
        }
 
+       zone = NULL;
+
        if (i_cal_time_get_timezone (start_time)) {
                zone = i_cal_time_get_timezone (start_time);
        } else {
@@ -903,8 +907,19 @@ cal_comp_get_instance_times (ECalClient *client,
                }
        }
 
+       if (!zone)
+               zone = default_zone;
+
        *out_instance_start = i_cal_time_clone (start_time);
-       i_cal_time_set_timezone (*out_instance_start, zone);
+       if (i_cal_time_is_date (*out_instance_start)) {
+               i_cal_time_set_is_date (*out_instance_start, FALSE);
+               i_cal_time_set_timezone (*out_instance_start, zone);
+               i_cal_time_set_is_date (*out_instance_start, TRUE);
+       } else {
+               i_cal_time_set_timezone (*out_instance_start, zone);
+       }
+
+       zone = NULL;
 
        if (i_cal_time_get_timezone (end_time)) {
                zone = i_cal_time_get_timezone (end_time);
@@ -936,8 +951,17 @@ cal_comp_get_instance_times (ECalClient *client,
                }
        }
 
+       if (!zone)
+               zone = default_zone;
+
        *out_instance_end = i_cal_time_clone (end_time);
-       i_cal_time_set_timezone (*out_instance_end, zone);
+       if (i_cal_time_is_date (*out_instance_end)) {
+               i_cal_time_set_is_date (*out_instance_end, FALSE);
+               i_cal_time_set_timezone (*out_instance_end, zone);
+               i_cal_time_set_is_date (*out_instance_end, TRUE);
+       } else {
+               i_cal_time_set_timezone (*out_instance_end, zone);
+       }
 
        g_clear_object (&start_time);
        g_clear_object (&end_time);
diff --git a/src/calendar/gui/e-cal-data-model.c b/src/calendar/gui/e-cal-data-model.c
index 81d45bd796..08b0d040e7 100644
--- a/src/calendar/gui/e-cal-data-model.c
+++ b/src/calendar/gui/e-cal-data-model.c
@@ -1147,8 +1147,8 @@ cal_data_model_instance_generated (ICalComponent *icomp,
        cal_comp_get_instance_times (gid->client, e_cal_component_get_icalcomponent (comp_copy),
                gid->zone, &tt, &tt2, cancellable);
 
-       start_tt = i_cal_time_as_timet (tt);
-       end_tt = i_cal_time_as_timet (tt2);
+       start_tt = i_cal_time_as_timet_with_zone (tt, i_cal_time_get_timezone (tt));
+       end_tt = i_cal_time_as_timet_with_zone (tt2, i_cal_time_get_timezone (tt2));
 
        g_clear_object (&tt);
        g_clear_object (&tt2);
@@ -1325,8 +1325,8 @@ cal_data_model_process_modified_or_added_objects (ECalClientView *view,
 
                                cal_comp_get_instance_times (client, icomp, data_model->priv->zone, 
&start_tt, &end_tt, NULL);
 
-                               instance_start = i_cal_time_as_timet (start_tt);
-                               instance_end = i_cal_time_as_timet (end_tt);
+                               instance_start = i_cal_time_as_timet_with_zone (start_tt, 
i_cal_time_get_timezone (start_tt));
+                               instance_end = i_cal_time_as_timet_with_zone (end_tt, i_cal_time_get_timezone 
(end_tt));
 
                                g_clear_object (&start_tt);
                                g_clear_object (&end_tt);
diff --git a/src/calendar/gui/e-cal-model.c b/src/calendar/gui/e-cal-model.c
index 3c7a293924..5daa424dea 100644
--- a/src/calendar/gui/e-cal-model.c
+++ b/src/calendar/gui/e-cal-model.c
@@ -4119,8 +4119,10 @@ e_cal_model_set_instance_times (ECalModelComponent *comp_data,
        cal_comp_get_instance_times (comp_data->client, comp_data->icalcomp, zone,
                &instance_start, &instance_end, NULL);
 
-       comp_data->instance_start = instance_start ? i_cal_time_as_timet (instance_start) : 
comp_data->instance_start;
-       comp_data->instance_end = instance_end ? i_cal_time_as_timet (instance_end) : comp_data->instance_end;
+       comp_data->instance_start = instance_start ? i_cal_time_as_timet_with_zone (instance_start,
+               i_cal_time_get_timezone (instance_start)) : comp_data->instance_start;
+       comp_data->instance_end = instance_end ? i_cal_time_as_timet_with_zone (instance_end,
+               i_cal_time_get_timezone (instance_end)) : comp_data->instance_end;
 
        g_clear_object (&instance_start);
        g_clear_object (&instance_end);
diff --git a/src/calendar/gui/e-comp-editor-page-reminders.c b/src/calendar/gui/e-comp-editor-page-reminders.c
index b2778d3902..1708886cc4 100644
--- a/src/calendar/gui/e-comp-editor-page-reminders.c
+++ b/src/calendar/gui/e-comp-editor-page-reminders.c
@@ -395,25 +395,20 @@ ecep_reminders_selected_to_widgets (ECompEditorPageReminders *page_reminders)
        }
 
        duration = e_cal_component_alarm_trigger_get_duration (trigger);
-       switch (i_cal_duration_is_neg (duration)) {
-       case 1:
+       if (!duration || i_cal_duration_is_neg (duration))
                e_dialog_combo_box_set (page_reminders->priv->relative_time_combo, BEFORE, relative_map);
-               break;
-
-       case 0:
+       else
                e_dialog_combo_box_set (page_reminders->priv->relative_time_combo, AFTER, relative_map);
-               break;
-       }
 
-       if (i_cal_duration_get_days (duration)) {
+       if (duration && i_cal_duration_get_days (duration)) {
                e_dialog_combo_box_set (page_reminders->priv->unit_combo, DAYS, value_map);
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (page_reminders->priv->time_spin),
                        i_cal_duration_get_days (duration));
-       } else if (i_cal_duration_get_hours (duration)) {
+       } else if (duration && i_cal_duration_get_hours (duration)) {
                e_dialog_combo_box_set (page_reminders->priv->unit_combo, HOURS, value_map);
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (page_reminders->priv->time_spin),
                        i_cal_duration_get_hours (duration));
-       } else if (i_cal_duration_get_minutes (duration)) {
+       } else if (duration && i_cal_duration_get_minutes (duration)) {
                e_dialog_combo_box_set (page_reminders->priv->unit_combo, MINUTES, value_map);
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (page_reminders->priv->time_spin),
                        i_cal_duration_get_minutes (duration));
@@ -425,7 +420,7 @@ ecep_reminders_selected_to_widgets (ECompEditorPageReminders *page_reminders)
        /* Repeat options */
        repeat = e_cal_component_alarm_get_repeat (alarm);
 
-       if (e_cal_component_alarm_repeat_get_repetitions (repeat)) {
+       if (repeat && e_cal_component_alarm_repeat_get_repetitions (repeat)) {
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (page_reminders->priv->repeat_check), TRUE);
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (page_reminders->priv->repeat_times_spin),
                        e_cal_component_alarm_repeat_get_repetitions (repeat));
diff --git a/src/calendar/gui/e-day-view-time-item.c b/src/calendar/gui/e-day-view-time-item.c
index 28be1eb729..ea9c2e0cbc 100644
--- a/src/calendar/gui/e-day-view-time-item.c
+++ b/src/calendar/gui/e-day-view-time-item.c
@@ -353,6 +353,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
                 * local time and the other timezone */
                ICalTimezone *cal_zone;
                ICalTime *tt;
+               gint is_daylight = 0; /* Its value is ignored, but libical-glib 3.0.5 API requires it */
                gint diff;
                struct tm mn;
 
@@ -362,8 +363,8 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item,
                        day_view->day_starts[0], 0, cal_zone);
 
                /* diff is number of minutes */
-               diff = (i_cal_timezone_get_utc_offset (use_zone, tt, NULL) -
-                       i_cal_timezone_get_utc_offset (cal_zone, tt, NULL)) / 60;
+               diff = (i_cal_timezone_get_utc_offset (use_zone, tt, &is_daylight) -
+                       i_cal_timezone_get_utc_offset (cal_zone, tt, &is_daylight)) / 60;
 
                g_clear_object (&tt);
 
diff --git a/src/calendar/gui/e-meeting-store.c b/src/calendar/gui/e-meeting-store.c
index f886101584..3a02fceb62 100644
--- a/src/calendar/gui/e-meeting-store.c
+++ b/src/calendar/gui/e-meeting-store.c
@@ -683,7 +683,7 @@ meeting_store_set_property (GObject *object,
                case PROP_TIMEZONE:
                        e_meeting_store_set_timezone (
                                E_MEETING_STORE (object),
-                               g_value_get_pointer (value));
+                               g_value_get_object (value));
                        return;
        }
 
@@ -733,7 +733,7 @@ meeting_store_get_property (GObject *object,
                        return;
 
                case PROP_TIMEZONE:
-                       g_value_set_pointer (
+                       g_value_set_object (
                                value,
                                e_meeting_store_get_timezone (
                                E_MEETING_STORE (object)));
@@ -857,10 +857,11 @@ e_meeting_store_class_init (EMeetingStoreClass *class)
        g_object_class_install_property (
                object_class,
                PROP_TIMEZONE,
-               g_param_spec_pointer (
+               g_param_spec_object (
                        "timezone",
                        "Timezone",
                        NULL,
+                       I_CAL_TYPE_TIMEZONE,
                        G_PARAM_READWRITE));
 }
 
diff --git a/src/calendar/gui/tag-calendar.c b/src/calendar/gui/tag-calendar.c
index 2926d27697..3dad09dd81 100644
--- a/src/calendar/gui/tag-calendar.c
+++ b/src/calendar/gui/tag-calendar.c
@@ -406,8 +406,8 @@ get_component_julian_range (ECalClient *client,
        cal_comp_get_instance_times (client, e_cal_component_get_icalcomponent (comp),
                zone, &instance_start, &instance_end, NULL);
 
-       start_tt = i_cal_time_as_timet (instance_start);
-       end_tt = i_cal_time_as_timet (instance_end);
+       start_tt = i_cal_time_as_timet_with_zone (instance_start, i_cal_time_get_timezone (instance_start));
+       end_tt = i_cal_time_as_timet_with_zone (instance_end, i_cal_time_get_timezone (instance_end));
 
        *start_julian = encode_timet_to_julian (start_tt, i_cal_time_is_date (instance_start), zone);
        *end_julian = encode_timet_to_julian (end_tt - (end_tt == start_tt ? 0 : 1), i_cal_time_is_date 
(instance_end), zone);
diff --git a/src/e-util/e-timezone-dialog.c b/src/e-util/e-timezone-dialog.c
index 11dc9e8e2b..a429faa795 100644
--- a/src/e-util/e-timezone-dialog.c
+++ b/src/e-util/e-timezone-dialog.c
@@ -529,13 +529,14 @@ zone_display_name_with_offset (const ICalTimezone *zone)
        const gchar *display_name;
        struct tm local;
        ICalTime *tt;
+       gint is_daylight = 0; /* Its value is ignored, but libical-glib 3.0.5 API requires it */
        gint offset;
        gchar buffer[100];
        time_t now = time (NULL);
 
        gmtime_r ((const time_t *) &now, &local);
        tt = e_cal_util_tm_to_icaltime (&local, TRUE);
-       offset = i_cal_timezone_get_utc_offset ((ICalTimezone *) zone, tt, NULL);
+       offset = i_cal_timezone_get_utc_offset ((ICalTimezone *) zone, tt, &is_daylight);
        g_clear_object (&tt);
 
        format_utc_offset (offset, buffer);


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