[evolution/wip/mcrha/eds-libical-glib] src/calendar/gui/ - table and list views



commit 8beacbd4f3f75cd146b09f463c8bf8d279788c05
Author: Milan Crha <mcrha redhat com>
Date:   Wed Mar 20 18:50:47 2019 +0100

    src/calendar/gui/ - table and list views

 src/calendar/gui/e-cal-list-view.c  |  61 ++++++------
 src/calendar/gui/e-cal-list-view.h  |  20 +---
 src/calendar/gui/e-date-time-list.c | 120 ++++++++++------------
 src/calendar/gui/e-memo-table.c     | 133 +++++++++++--------------
 src/calendar/gui/e-memo-table.h     |   6 --
 src/calendar/gui/e-task-table.c     | 193 +++++++++++++++++-------------------
 src/calendar/gui/e-task-table.h     |   6 --
 7 files changed, 244 insertions(+), 295 deletions(-)
---
diff --git a/src/calendar/gui/e-cal-list-view.c b/src/calendar/gui/e-cal-list-view.c
index e1d210b13c..2c13250a6c 100644
--- a/src/calendar/gui/e-cal-list-view.c
+++ b/src/calendar/gui/e-cal-list-view.c
@@ -39,6 +39,14 @@
 #include "calendar-config.h"
 #include "misc.h"
 
+struct _ECalListViewPrivate {
+       /* The main display table */
+       ETable *table;
+
+       /* The last ECalendarViewEvent we returned from e_cal_list_view_get_selected_events(), to be freed */
+       ECalendarViewEvent *cursor_event;
+};
+
 enum {
        PROP_0,
        PROP_IS_EDITING
@@ -93,6 +101,8 @@ e_cal_list_view_class_init (ECalListViewClass *class)
        widget_class = (GtkWidgetClass *) class;
        view_class = (ECalendarViewClass *) class;
 
+       g_type_class_add_private (class, sizeof (ECalListViewPrivate));
+
        /* Method override */
        object_class->dispose = e_cal_list_view_dispose;
        object_class->get_property = e_cal_list_view_get_property;
@@ -112,9 +122,10 @@ e_cal_list_view_class_init (ECalListViewClass *class)
 static void
 e_cal_list_view_init (ECalListView *cal_list_view)
 {
-       cal_list_view->table = NULL;
-       cal_list_view->cursor_event = NULL;
-       cal_list_view->set_table_id = 0;
+       cal_list_view->priv = G_TYPE_INSTANCE_GET_PRIVATE (cal_list_view, E_TYPE_CAL_LIST_VIEW, 
ECalListViewPrivate);
+
+       cal_list_view->priv->table = NULL;
+       cal_list_view->priv->cursor_event = NULL;
 }
 
 /* Returns the current time, for the ECellDateEdit items. */
@@ -211,7 +222,6 @@ setup_e_table (ECalListView *cal_list_view)
 
        e_table_extras_add_cell (extras, "dateedit", popup_cell);
        g_object_unref (popup_cell);
-       cal_list_view->dates_cell = E_CELL_DATE_EDIT (popup_cell);
 
        gtk_widget_hide (E_CELL_DATE_EDIT (popup_cell)->none_button);
 
@@ -287,7 +297,7 @@ setup_e_table (ECalListView *cal_list_view)
 
        widget = e_table_new (E_TABLE_MODEL (model), extras, specification);
        gtk_container_add (GTK_CONTAINER (container), widget);
-       cal_list_view->table = E_TABLE (widget);
+       cal_list_view->priv->table = E_TABLE (widget);
        gtk_widget_show (widget);
 
        g_object_unref (specification);
@@ -296,27 +306,27 @@ setup_e_table (ECalListView *cal_list_view)
 
        /* Connect signals */
        g_signal_connect (
-               cal_list_view->table, "double_click",
+               cal_list_view->priv->table, "double_click",
                G_CALLBACK (e_cal_list_view_on_table_double_click),
                cal_list_view);
        g_signal_connect (
-               cal_list_view->table, "right-click",
+               cal_list_view->priv->table, "right-click",
                G_CALLBACK (e_cal_list_view_on_table_right_click),
                cal_list_view);
        g_signal_connect (
-               cal_list_view->table, "key-press",
+               cal_list_view->priv->table, "key-press",
                G_CALLBACK (e_cal_list_view_on_table_key_press),
                cal_list_view);
        g_signal_connect (
-               cal_list_view->table, "white-space-event",
+               cal_list_view->priv->table, "white-space-event",
                G_CALLBACK (e_cal_list_view_on_table_white_space_event),
                cal_list_view);
        g_signal_connect_after (
-               cal_list_view->table, "cursor_change",
+               cal_list_view->priv->table, "cursor_change",
                G_CALLBACK (e_cal_list_view_cursor_change_cb),
                cal_list_view);
        e_signal_connect_notify_after (
-               cal_list_view->table, "notify::is-editing",
+               cal_list_view->priv->table, "notify::is-editing",
                G_CALLBACK (e_cal_list_view_table_editing_changed_cb),
                cal_list_view);
 }
@@ -346,19 +356,14 @@ e_cal_list_view_dispose (GObject *object)
 
        cal_list_view = E_CAL_LIST_VIEW (object);
 
-       if (cal_list_view->set_table_id) {
-               g_source_remove (cal_list_view->set_table_id);
-               cal_list_view->set_table_id = 0;
-       }
-
-       if (cal_list_view->cursor_event) {
-               g_free (cal_list_view->cursor_event);
-               cal_list_view->cursor_event = NULL;
+       if (cal_list_view->priv->cursor_event) {
+               g_free (cal_list_view->priv->cursor_event);
+               cal_list_view->priv->cursor_event = NULL;
        }
 
-       if (cal_list_view->table) {
-               gtk_widget_destroy (GTK_WIDGET (cal_list_view->table));
-               cal_list_view->table = NULL;
+       if (cal_list_view->priv->table) {
+               gtk_widget_destroy (GTK_WIDGET (cal_list_view->priv->table));
+               cal_list_view->priv->table = NULL;
        }
 
        /* Chain up to parent's dispose() method. */
@@ -550,18 +555,18 @@ e_cal_list_view_get_selected_events (ECalendarView *cal_view)
        GList *event_list = NULL;
        gint   cursor_row;
 
-       if (E_CAL_LIST_VIEW (cal_view)->cursor_event) {
-               g_free (E_CAL_LIST_VIEW (cal_view)->cursor_event);
-               E_CAL_LIST_VIEW (cal_view)->cursor_event = NULL;
+       if (E_CAL_LIST_VIEW (cal_view)->priv->cursor_event) {
+               g_free (E_CAL_LIST_VIEW (cal_view)->priv->cursor_event);
+               E_CAL_LIST_VIEW (cal_view)->priv->cursor_event = NULL;
        }
 
        cursor_row = e_table_get_cursor_row (
-               E_CAL_LIST_VIEW (cal_view)->table);
+               E_CAL_LIST_VIEW (cal_view)->priv->table);
 
        if (cursor_row >= 0) {
                ECalendarViewEvent *event;
 
-               event = E_CAL_LIST_VIEW (cal_view)->cursor_event = g_new0 (ECalendarViewEvent, 1);
+               event = E_CAL_LIST_VIEW (cal_view)->priv->cursor_event = g_new0 (ECalendarViewEvent, 1);
                event->comp_data =
                        e_cal_model_get_component_at (
                                e_calendar_view_get_model (cal_view),
@@ -666,5 +671,5 @@ e_cal_list_view_is_editing (ECalListView *eclv)
 {
        g_return_val_if_fail (E_IS_CAL_LIST_VIEW (eclv), FALSE);
 
-       return eclv->table && e_table_is_editing (eclv->table);
+       return eclv->priv->table && e_table_is_editing (eclv->priv->table);
 }
diff --git a/src/calendar/gui/e-cal-list-view.h b/src/calendar/gui/e-cal-list-view.h
index b8a6aaabb8..72973f7c99 100644
--- a/src/calendar/gui/e-cal-list-view.h
+++ b/src/calendar/gui/e-cal-list-view.h
@@ -55,26 +55,14 @@
 
 G_BEGIN_DECLS
 
-typedef struct _ECalListView       ECalListView;
-typedef struct _ECalListViewClass  ECalListViewClass;
+typedef struct _ECalListView ECalListView;
+typedef struct _ECalListViewClass ECalListViewClass;
+typedef struct _ECalListViewPrivate ECalListViewPrivate;
 
 struct _ECalListView {
        ECalendarView parent;
 
-       /* The main display table */
-       ETable *table;
-
-       /* The default category for new events */
-       gchar *default_category;
-
-       /* Date editing cell */
-       ECellDateEdit *dates_cell;
-
-       /* The last ECalendarViewEvent we returned from e_cal_list_view_get_selected_events(), to be freed */
-       ECalendarViewEvent *cursor_event;
-
-       /* Idle handler ID for setting a new ETableModel */
-       gint set_table_id;
+       ECalListViewPrivate *priv;
 };
 
 struct _ECalListViewClass {
diff --git a/src/calendar/gui/e-date-time-list.c b/src/calendar/gui/e-date-time-list.c
index 681e0a2bcf..be469b1907 100644
--- a/src/calendar/gui/e-date-time-list.c
+++ b/src/calendar/gui/e-date-time-list.c
@@ -45,7 +45,7 @@ struct _EDateTimeListPrivate {
        guint    columns_dirty : 1;
 
        gboolean use_24_hour_format;
-       icaltimezone *zone;
+       ICalTimezone *zone;
 };
 
 enum {
@@ -63,28 +63,11 @@ G_DEFINE_TYPE_WITH_CODE (
        G_IMPLEMENT_INTERFACE (
                GTK_TYPE_TREE_MODEL, e_date_time_list_tree_model_init))
 
-static void
-free_datetime (struct icaltimetype *itt)
-{
-       g_free (itt);
-}
-
-static struct icaltimetype *
-copy_datetime (const struct icaltimetype itt)
-{
-       struct icaltimetype *itt_copy;
-
-       itt_copy = g_new0 (struct icaltimetype, 1);
-       *itt_copy = itt;
-
-       return itt_copy;
-}
-
 static gint
-compare_datetime (const struct icaltimetype *itt1,
-                  const struct icaltimetype *itt2)
+compare_datetime (const ICalTimetype *itt1,
+                  const ICalTimetype *itt2)
 {
-       return icaltime_compare (*itt1, *itt2);
+       return i_cal_time_compare ((ICalTimetype *) itt1, (ICalTimetype *) itt2);
 }
 
 static void
@@ -155,39 +138,30 @@ row_updated (EDateTimeList *date_time_list,
 /* Builds a static string out of an exception date */
 static gchar *
 get_exception_string (EDateTimeList *date_time_list,
-                      struct icaltimetype *itt)
+                     ICalTimetype *itt)
 {
        static gchar buf[256];
-       struct icaltimetype tt;
        struct tm tmp_tm;
-       icaltimezone *zone;
+       ICalTimetype *tt;
+       ICalTimezone *zone;
        gboolean use_24_hour_format;
 
        use_24_hour_format = e_date_time_list_get_use_24_hour_format (date_time_list);
        zone = e_date_time_list_get_timezone (date_time_list);
 
-       tt = *itt;
-
        if (zone)
-               tt = icaltime_convert_to_zone (tt, zone);
-
-       tmp_tm.tm_year = tt.year - 1900;
-       tmp_tm.tm_mon = tt.month - 1;
-       tmp_tm.tm_mday = tt.day;
-       tmp_tm.tm_hour = tt.hour;
-       tmp_tm.tm_min = tt.minute;
-       tmp_tm.tm_sec = tt.second;
-       tmp_tm.tm_isdst = -1;
+               tt = i_cal_time_convert_to_zone (itt, zone);
+       else
+               tt = g_object_ref (itt);
 
-       tmp_tm.tm_wday = time_day_of_week (
-               tt.day,
-               tt.month - 1,
-               tt.year);
+       tmp_tm = icaltimetype_to_tm (tt);
 
        e_time_format_date_and_time (
                &tmp_tm, use_24_hour_format,
                FALSE, FALSE, buf, sizeof (buf));
 
+       g_clear_object (&tt);
+
        return buf;
 }
 
@@ -238,6 +212,22 @@ date_time_list_get_property (GObject *object,
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 }
 
+static void
+date_time_list_finalize (GObject *object)
+{
+       EDateTimeList *date_time_list = E_DATE_TIME_LIST (object);
+
+       g_clear_object (&date_time_list->priv->zone);
+
+       g_warn_if_fail (date_time_list->priv->list == NULL);
+
+       g_list_free_full (date_time_list->priv->list, g_object_unref);
+       date_time_list->priv->list = NULL;
+
+       /* Chain up to parent's method. */
+       G_OBJECT_CLASS (e_date_time_list_parent_class)->finalize (object);
+}
+
 static GtkTreeModelFlags
 date_time_list_get_flags (GtkTreeModel *tree_model)
 {
@@ -321,10 +311,10 @@ date_time_list_get_value (GtkTreeModel *tree_model,
                           gint column,
                           GValue *value)
 {
-       EDateTimeList        *date_time_list = E_DATE_TIME_LIST (tree_model);
-       struct icaltimetype  *itt;
-       GList                *l;
-       const gchar          *str;
+       EDateTimeList *date_time_list = E_DATE_TIME_LIST (tree_model);
+       ICalTimetype *itt;
+       GList *link;
+       const gchar *str;
 
        g_return_if_fail (E_IS_DATE_TIME_LIST (tree_model));
        g_return_if_fail (column < E_DATE_TIME_LIST_NUM_COLUMNS);
@@ -336,8 +326,8 @@ date_time_list_get_value (GtkTreeModel *tree_model,
        if (!date_time_list->priv->list)
                return;
 
-       l = iter->user_data;
-       itt = l->data;
+       link = iter->user_data;
+       itt = link->data;
 
        if (!itt)
                return;
@@ -463,6 +453,7 @@ e_date_time_list_class_init (EDateTimeListClass *class)
        object_class = G_OBJECT_CLASS (class);
        object_class->set_property = date_time_list_set_property;
        object_class->get_property = date_time_list_get_property;
+       object_class->finalize = date_time_list_finalize;
 
        g_object_class_install_property (
                object_class,
@@ -519,7 +510,7 @@ e_date_time_list_new (void)
        return g_object_new (E_TYPE_DATE_TIME_LIST, NULL);
 }
 
-struct icaltimetype *
+ICalTimetype *
 e_date_time_list_get_date_time (EDateTimeList *date_time_list,
                                 GtkTreeIter *iter)
 {
@@ -531,15 +522,15 @@ e_date_time_list_get_date_time (EDateTimeList *date_time_list,
 void
 e_date_time_list_set_date_time (EDateTimeList *date_time_list,
                                 GtkTreeIter *iter,
-                                const struct icaltimetype itt)
+                                const ICalTimetype *itt)
 {
-       struct icaltimetype *itt_old;
+       ICalTimetype *itt_old;
 
        g_return_if_fail (IS_VALID_ITER (date_time_list, iter));
 
        itt_old = G_LIST (iter->user_data)->data;
-       free_datetime (itt_old);
-       G_LIST (iter->user_data)->data = copy_datetime (itt);
+       g_clear_object (&itt_old);
+       G_LIST (iter->user_data)->data = i_cal_timetype_new_clone (itt);
        row_updated (date_time_list,
                g_list_position (date_time_list->priv->list, G_LIST (iter->user_data)));
 }
@@ -566,7 +557,7 @@ e_date_time_list_set_use_24_hour_format (EDateTimeList *date_time_list,
        g_object_notify (G_OBJECT (date_time_list), "use-24-hour-format");
 }
 
-icaltimezone *
+ICalTimezone *
 e_date_time_list_get_timezone (EDateTimeList *date_time_list)
 {
        g_return_val_if_fail (E_IS_DATE_TIME_LIST (date_time_list), NULL);
@@ -576,14 +567,16 @@ e_date_time_list_get_timezone (EDateTimeList *date_time_list)
 
 void
 e_date_time_list_set_timezone (EDateTimeList *date_time_list,
-                              icaltimezone *zone)
+                              const ICalTimezone *zone)
 {
        g_return_if_fail (E_IS_DATE_TIME_LIST (date_time_list));
 
        if (date_time_list->priv->zone == zone)
                return;
 
-       date_time_list->priv->zone = zone;
+       g_clear_object (&date_time_list->priv->zone);
+       if (zone)
+               date_time_list->priv->zone = g_object_ref ((ICalTimezone *) zone);
 
        g_object_notify (G_OBJECT (date_time_list), "timezone");
 }
@@ -591,12 +584,13 @@ e_date_time_list_set_timezone (EDateTimeList *date_time_list,
 void
 e_date_time_list_append (EDateTimeList *date_time_list,
                          GtkTreeIter *iter,
-                         const struct icaltimetype itt)
+                         const ICalTimetype *itt)
 {
-       g_return_if_fail (icaltime_is_valid_time (itt));
+       g_return_if_fail (itt != NULL);
+       g_return_if_fail (i_cal_time_is_valid_time ((ICalTimetype *) itt));
 
-       if (g_list_find_custom (date_time_list->priv->list, &itt, (GCompareFunc) compare_datetime) == NULL) {
-               date_time_list->priv->list = g_list_append (date_time_list->priv->list, copy_datetime (itt));
+       if (g_list_find_custom (date_time_list->priv->list, itt, (GCompareFunc) compare_datetime) == NULL) {
+               date_time_list->priv->list = g_list_append (date_time_list->priv->list, 
i_cal_timetype_new_clone (itt));
                row_added (date_time_list, g_list_length (date_time_list->priv->list) - 1);
        }
 
@@ -610,12 +604,14 @@ void
 e_date_time_list_remove (EDateTimeList *date_time_list,
                          GtkTreeIter *iter)
 {
+       ICalTimetype *itt;
        gint n;
 
        g_return_if_fail (IS_VALID_ITER (date_time_list, iter));
 
        n = g_list_position (date_time_list->priv->list, G_LIST (iter->user_data));
-       free_datetime (G_LIST (iter->user_data)->data);
+       itt = G_LIST (iter->user_data)->data;
+       g_clear_object (&itt);
        date_time_list->priv->list = g_list_delete_link (
                date_time_list->priv->list, G_LIST (iter->user_data));
        row_deleted (date_time_list, n);
@@ -624,14 +620,8 @@ e_date_time_list_remove (EDateTimeList *date_time_list,
 void
 e_date_time_list_clear (EDateTimeList *date_time_list)
 {
-       GList *l;
-
        all_rows_deleted (date_time_list);
 
-       for (l = date_time_list->priv->list; l; l = g_list_next (l)) {
-               free_datetime (l->data);
-       }
-
-       g_list_free (date_time_list->priv->list);
+       g_list_free_full (date_time_list->priv->list, g_object_unref);
        date_time_list->priv->list = NULL;
 }
diff --git a/src/calendar/gui/e-memo-table.c b/src/calendar/gui/e-memo-table.c
index 9e43a67d7c..476a6ae777 100644
--- a/src/calendar/gui/e-memo-table.c
+++ b/src/calendar/gui/e-memo-table.c
@@ -39,6 +39,7 @@
 #include "e-cal-ops.h"
 #include "e-calendar-view.h"
 #include "e-cell-date-edit-text.h"
+#include "itip-utils.h"
 #include "print.h"
 #include "misc.h"
 
@@ -50,6 +51,9 @@ struct _EMemoTablePrivate {
        gpointer shell_view;  /* weak pointer */
        ECalModel *model;
 
+       /* Fields used for cut/copy/paste */
+       ICalComponent *tmp_vcal;
+
        GtkTargetList *copy_target_list;
        GtkTargetList *paste_target_list;
 };
@@ -115,24 +119,20 @@ memo_table_get_current_time (ECellDateEdit *ecde,
 {
        EMemoTable *memo_table = user_data;
        ECalModel *model;
-       icaltimezone *zone;
-       struct tm tmp_tm = { 0 };
-       struct icaltimetype tt;
+       ICalTimezone *zone;
+       ICalTimetype *tt;
+       struct tm tmp_tm;
 
        /* Get the current timezone. */
        model = e_memo_table_get_model (memo_table);
        zone = e_cal_model_get_timezone (model);
 
-       tt = icaltime_from_timet_with_zone (time (NULL), FALSE, zone);
+       tt = i_cal_time_from_timet_with_zone (time (NULL), FALSE, zone);
 
        /* Now copy it to the struct tm and return it. */
-       tmp_tm.tm_year = tt.year - 1900;
-       tmp_tm.tm_mon = tt.month - 1;
-       tmp_tm.tm_mday = tt.day;
-       tmp_tm.tm_hour = tt.hour;
-       tmp_tm.tm_min = tt.minute;
-       tmp_tm.tm_sec = tt.second;
-       tmp_tm.tm_isdst = -1;
+       tmp_tm = icaltimetype_to_tm (tt);
+
+       g_clear_object (&tt);
 
        return tmp_tm;
 }
@@ -323,7 +323,6 @@ memo_table_constructed (GObject *object)
 
        e_table_extras_add_cell (extras, "dateedit", popup_cell);
        g_object_unref (popup_cell);
-       memo_table->dates_cell = E_CELL_DATE_EDIT (popup_cell);
 
        e_cell_date_edit_set_get_time_callback (
                E_CELL_DATE_EDIT (popup_cell),
@@ -404,10 +403,9 @@ memo_table_query_tooltip (GtkWidget *widget,
        gchar *tmp, *summary;
        GString *tmp2;
        ECalComponent *new_comp;
-       ECalComponentOrganizer organizer;
-       ECalComponentDateTime dtstart, dtdue;
-       icalcomponent *clone;
-       icaltimezone *zone, *default_zone;
+       ECalComponentOrganizer *organizer;
+       ECalComponentDateTime *dtstart, *dtdue;
+       ICalTimezone *zone, *default_zone;
        GSList *desc, *p;
        gint len;
        ESelectionModel *esm;
@@ -436,12 +434,9 @@ memo_table_query_tooltip (GtkWidget *widget,
        if (!comp_data || !comp_data->icalcomp)
                return FALSE;
 
-       new_comp = e_cal_component_new ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
-       if (!e_cal_component_set_icalcomponent (new_comp, clone)) {
-               g_object_unref (new_comp);
+       new_comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
+       if (!new_comp)
                return FALSE;
-       }
 
        e_utils_get_theme_color (widget, "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, 
&sel_bg);
        e_utils_get_theme_color (widget, "theme_selected_fg_color", E_UTILS_DEFAULT_THEME_SELECTED_FG_COLOR, 
&sel_fg);
@@ -453,7 +448,7 @@ memo_table_query_tooltip (GtkWidget *widget,
        summary = e_calendar_view_dup_component_summary (comp_data->client, comp_data->icalcomp);
        if (!(summary && *summary)) {
                g_free (summary);
-               summary = g_Strdup (_("* No Summary *"));
+               summary = g_strdup (_("* No Summary *"));
        }
 
        l = gtk_label_new (NULL);
@@ -479,22 +474,22 @@ memo_table_query_tooltip (GtkWidget *widget,
        gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 0);
        w = l;
 
-       e_cal_component_get_organizer (new_comp, &organizer);
-       if (organizer.cn) {
-               gchar *ptr;
-               ptr = strchr (organizer.value, ':');
+       organizer = e_cal_component_get_organizer (new_comp);
+       if (organizer && e_cal_component_organizer_get_cn (organizer)) {
+               const gchar *email;
+
+               email = itip_strip_mailto (e_cal_component_organizer_get_value (organizer));
 
-               if (ptr) {
-                       ptr++;
+               if (email) {
                        tmp = g_strdup_printf (
                                /* Translators: It will display
                                 * "Organizer: NameOfTheUser <email ofuser com>" */
-                               _("Organizer: %s <%s>"), organizer.cn, ptr);
+                               _("Organizer: %s <%s>"), e_cal_component_organizer_get_cn (organizer), email);
                } else {
                        /* With SunOne accounts, there may be no ':' in
                         * organizer.value */
                        tmp = g_strdup_printf (
-                               _("Organizer: %s"), organizer.cn);
+                               _("Organizer: %s"), e_cal_component_organizer_get_cn (organizer));
                }
 
                l = gtk_label_new (tmp);
@@ -506,18 +501,20 @@ memo_table_query_tooltip (GtkWidget *widget,
                gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text);
        }
 
-       e_cal_component_get_dtstart (new_comp, &dtstart);
-       e_cal_component_get_due (new_comp, &dtdue);
+       e_cal_component_organizer_free (organizer);
+
+       dtstart = e_cal_component_get_dtstart (new_comp);
+       dtdue = e_cal_component_get_due (new_comp);
 
        default_zone = e_cal_model_get_timezone (model);
 
-       if (dtstart.tzid) {
-               zone = icalcomponent_get_timezone (
+       if (dtstart && e_cal_component_datetime_get_tzid (dtstart)) {
+               zone = i_cal_component_get_timezone (
                        e_cal_component_get_icalcomponent (new_comp),
-                       dtstart.tzid);
+                       e_cal_component_datetime_get_tzid (dtstart));
                if (!zone)
                        e_cal_client_get_timezone_sync (
-                               comp_data->client, dtstart.tzid, &zone, NULL, NULL);
+                               comp_data->client, e_cal_component_datetime_get_tzid (dtstart), &zone, NULL, 
NULL);
                if (!zone)
                        zone = default_zone;
        } else {
@@ -526,12 +523,12 @@ memo_table_query_tooltip (GtkWidget *widget,
 
        tmp2 = g_string_new ("");
 
-       if (dtstart.value) {
+       if (dtstart && e_cal_component_datetime_get_value (dtstart)) {
                gchar *str;
 
-               tmp_tm = icaltimetype_to_tm_with_zone (dtstart.value, zone, default_zone);
+               tmp_tm = icaltimetype_to_tm_with_zone (e_cal_component_datetime_get_value (dtstart), zone, 
default_zone);
                str = e_datetime_format_format_tm ("calendar", "table",
-                       dtstart.value->is_date ? DTFormatKindDate : DTFormatKindDateTime,
+                       i_cal_time_is_date (e_cal_component_datetime_get_value (dtstart)) ? DTFormatKindDate 
: DTFormatKindDateTime,
                        &tmp_tm);
 
                if (str && *str) {
@@ -543,12 +540,12 @@ memo_table_query_tooltip (GtkWidget *widget,
                g_free (str);
        }
 
-       if (dtdue.value) {
+       if (dtdue && e_cal_component_datetime_get_value (dtdue)) {
                gchar *str;
 
-               tmp_tm = icaltimetype_to_tm_with_zone (dtdue.value, zone, default_zone);
+               tmp_tm = icaltimetype_to_tm_with_zone (e_cal_component_datetime_get_value (dtdue), zone, 
default_zone);
                str = e_datetime_format_format_tm ("calendar", "table",
-                       dtdue.value->is_date ? DTFormatKindDate : DTFormatKindDateTime,
+                       i_cal_time_is_date (e_cal_component_datetime_get_value (dtdue)) ? DTFormatKindDate : 
DTFormatKindDateTime,
                        &tmp_tm);
 
                if (str && *str) {
@@ -573,25 +570,26 @@ memo_table_query_tooltip (GtkWidget *widget,
 
        g_string_free (tmp2, TRUE);
 
-       e_cal_component_free_datetime (&dtstart);
-       e_cal_component_free_datetime (&dtdue);
+       e_cal_component_datetime_free (dtstart);
+       e_cal_component_datetime_free (dtdue);
 
        tmp2 = g_string_new ("");
-       e_cal_component_get_description_list (new_comp, &desc);
+       desc = e_cal_component_get_descriptions (new_comp);
        for (len = 0, p = desc; p != NULL; p = p->next) {
                ECalComponentText *text = p->data;
 
-               if (text->value != NULL) {
-                       len += strlen (text->value);
-                       g_string_append (tmp2, text->value);
+               if (text && e_cal_component_text_get_value (text)) {
+                       const gchar *value = e_cal_component_text_get_value (text);
+                       len += strlen (value);
+                       g_string_append (tmp2, value);
                        if (len > 1024) {
                                g_string_set_size (tmp2, 1020);
-                               g_string_append (tmp2, "...");
+                               g_string_append (tmp2, "…");
                                break;
                        }
                }
        }
-       e_cal_component_free_text_list (desc);
+       g_slist_free_full (desc, e_cal_component_text_free);
 
        if (tmp2->len) {
                l = gtk_label_new (tmp2->str);
@@ -813,12 +811,11 @@ copy_row_cb (gint model_row,
        EMemoTable *memo_table;
        ECalModelComponent *comp_data;
        ECalModel *model;
-       gchar *comp_str;
-       icalcomponent *child;
+       ICalComponent *child;
 
        memo_table = E_MEMO_TABLE (data);
 
-       g_return_if_fail (memo_table->tmp_vcal != NULL);
+       g_return_if_fail (memo_table->priv->tmp_vcal != NULL);
 
        model = e_memo_table_get_model (memo_table);
        comp_data = e_cal_model_get_component_at (model, model_row);
@@ -827,18 +824,12 @@ copy_row_cb (gint model_row,
 
        /* Add timezones to the VCALENDAR component. */
        e_cal_util_add_timezones_from_component (
-               memo_table->tmp_vcal, comp_data->icalcomp);
+               memo_table->priv->tmp_vcal, comp_data->icalcomp);
 
        /* Add the new component to the VCALENDAR component. */
-       comp_str = icalcomponent_as_ical_string_r (comp_data->icalcomp);
-       child = icalparser_parse_string (comp_str);
-       if (child) {
-               icalcomponent_add_component (
-                       memo_table->tmp_vcal,
-                       icalcomponent_new_clone (child));
-               icalcomponent_free (child);
-       }
-       g_free (comp_str);
+       child = i_cal_component_new_clone (comp_data->icalcomp);
+       if (child)
+               i_cal_component_take_component (memo_table->priv->tmp_vcal, child);
 }
 
 static void
@@ -851,11 +842,11 @@ memo_table_copy_clipboard (ESelectable *selectable)
        memo_table = E_MEMO_TABLE (selectable);
 
        /* Create a temporary VCALENDAR object. */
-       memo_table->tmp_vcal = e_cal_util_new_top_level ();
+       memo_table->priv->tmp_vcal = e_cal_util_new_top_level ();
 
        e_table_selected_row_foreach (
                E_TABLE (memo_table), copy_row_cb, memo_table);
-       comp_str = icalcomponent_as_ical_string_r (memo_table->tmp_vcal);
+       comp_str = i_cal_component_as_ical_string_r (memo_table->priv->tmp_vcal);
 
        clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
        e_clipboard_set_calendar (clipboard, comp_str, -1);
@@ -863,8 +854,7 @@ memo_table_copy_clipboard (ESelectable *selectable)
 
        g_free (comp_str);
 
-       icalcomponent_free (memo_table->tmp_vcal);
-       memo_table->tmp_vcal = NULL;
+       g_clear_object (&memo_table->priv->tmp_vcal);
 }
 
 static void
@@ -971,9 +961,8 @@ memo_table_delete_selection (ESelectable *selectable)
        /* FIXME: this may be something other than a TODO component */
 
        if (comp_data) {
-               comp = e_cal_component_new ();
-               e_cal_component_set_icalcomponent (
-                       comp, icalcomponent_new_clone (comp_data->icalcomp));
+               comp = e_cal_component_new_from_icalcomponent (
+                       i_cal_component_new_clone (comp_data->icalcomp));
        }
 
        if (e_cal_model_get_confirm_delete (model))
@@ -985,9 +974,7 @@ memo_table_delete_selection (ESelectable *selectable)
        if (delete)
                delete_selected_components (memo_table);
 
-       /* free memory */
-       if (comp)
-               g_object_unref (comp);
+       g_clear_object (&comp);
 }
 
 static void
diff --git a/src/calendar/gui/e-memo-table.h b/src/calendar/gui/e-memo-table.h
index d01f0a8b45..3e8b7d1786 100644
--- a/src/calendar/gui/e-memo-table.h
+++ b/src/calendar/gui/e-memo-table.h
@@ -64,12 +64,6 @@ typedef struct _EMemoTablePrivate EMemoTablePrivate;
 struct _EMemoTable {
        ETable parent;
 
-       /* The ECell used to view & edit dates. */
-       ECellDateEdit *dates_cell;
-
-       /* Fields used for cut/copy/paste */
-       ICalComponent *tmp_vcal;
-
        EMemoTablePrivate *priv;
 };
 
diff --git a/src/calendar/gui/e-task-table.c b/src/calendar/gui/e-task-table.c
index bafb2f9c8e..3f150050b3 100644
--- a/src/calendar/gui/e-task-table.c
+++ b/src/calendar/gui/e-task-table.c
@@ -55,6 +55,9 @@ struct _ETaskTablePrivate {
        ECalModel *model;
        GCancellable *completed_cancellable; /* when processing completed tasks */
 
+       /* Fields used for cut/copy/paste */
+       ICalComponent *tmp_vcal;
+
        GtkTargetList *copy_target_list;
        GtkTargetList *paste_target_list;
 
@@ -270,7 +273,7 @@ task_table_dates_cell_before_popup_cb (ECellDateEdit *dates_cell,
 
        model = e_task_table_get_model (task_table);
        comp_data = e_cal_model_get_component_at (model, row);
-       date_only = comp_data && comp_data->client && e_client_check_capability (E_CLIENT 
(comp_data->client), CAL_STATIC_CAPABILITY_TASK_DATE_ONLY);
+       date_only = comp_data && comp_data->client && e_client_check_capability (E_CLIENT 
(comp_data->client), E_CAL_STATIC_CAPABILITY_TASK_DATE_ONLY);
 
        g_object_set (G_OBJECT (dates_cell), "show-time", !date_only, NULL);
 }
@@ -490,13 +493,12 @@ task_table_constructed (GObject *object)
                G_BINDING_SYNC_CREATE);
 
        e_table_extras_add_cell (extras, "dateedit", popup_cell);
-       g_object_unref (popup_cell);
-
-       task_table->dates_cell = E_CELL_DATE_EDIT (popup_cell);
 
-       g_signal_connect (task_table->dates_cell, "before-popup",
+       g_signal_connect (popup_cell, "before-popup",
                G_CALLBACK (task_table_dates_cell_before_popup_cb), task_table);
 
+       g_object_unref (popup_cell);
+
        e_cell_date_edit_set_get_time_callback (
                E_CELL_DATE_EDIT (popup_cell),
                e_task_table_get_current_time, task_table, NULL);
@@ -713,10 +715,10 @@ task_table_popup_menu (GtkWidget *widget)
 
 static gboolean
 task_table_query_tooltip (GtkWidget *widget,
-                              gint x,
-                              gint y,
-                              gboolean keyboard_mode,
-                              GtkTooltip *tooltip)
+                         gint x,
+                         gint y,
+                         gboolean keyboard_mode,
+                         GtkTooltip *tooltip)
 {
        ETaskTable *task_table;
        ECalModel *model;
@@ -724,14 +726,12 @@ task_table_query_tooltip (GtkWidget *widget,
        gint row = -1, col = -1, row_y = -1, row_height = -1;
        GtkWidget *box, *l, *w;
        GdkRGBA sel_bg, sel_fg, norm_bg, norm_text;
-       gchar *tmp, *summary;
-       const gchar *str;
+       gchar *tmp, *summary, *str;
        GString *tmp2;
        ECalComponent *new_comp;
-       ECalComponentOrganizer organizer;
-       ECalComponentDateTime dtstart, dtdue;
-       icalcomponent *clone;
-       icaltimezone *zone, *default_zone;
+       ECalComponentOrganizer *organizer;
+       ECalComponentDateTime *dtstart, *dtdue;
+       ICalTimezone *zone, *default_zone;
        GSList *desc, *p;
        gint len;
        ESelectionModel *esm;
@@ -758,12 +758,9 @@ task_table_query_tooltip (GtkWidget *widget,
        if (!comp_data || !comp_data->icalcomp)
                return FALSE;
 
-       new_comp = e_cal_component_new ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
-       if (!e_cal_component_set_icalcomponent (new_comp, clone)) {
-               g_object_unref (new_comp);
+       new_comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
+       if (!new_comp)
                return FALSE;
-       }
 
        e_utils_get_theme_color (widget, "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, 
&sel_bg);
        e_utils_get_theme_color (widget, "theme_selected_fg_color", E_UTILS_DEFAULT_THEME_SELECTED_FG_COLOR, 
&sel_fg);
@@ -801,20 +798,20 @@ task_table_query_tooltip (GtkWidget *widget,
        gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 0);
        w = l;
 
-       e_cal_component_get_organizer (new_comp, &organizer);
-       if (organizer.cn) {
-               gchar *ptr;
-               ptr = strchr (organizer.value, ':');
+       organizer = e_cal_component_get_organizer (new_comp);
+       if (organizer && e_cal_component_organizer_get_cn (organizer)) {
+               const gchar *email;
+
+               email = itip_strip_mailto (e_cal_component_organizer_get_value (organizer));
 
-               if (ptr) {
-                       ptr++;
+               if (email) {
                        /* To Translators: It will display
                         * "Organizer: NameOfTheUser <email ofuser com>" */
-                       tmp = g_strdup_printf (_("Organizer: %s <%s>"), organizer.cn, ptr);
+                       tmp = g_strdup_printf (_("Organizer: %s <%s>"), e_cal_component_organizer_get_cn 
(organizer), email);
                } else {
                        /* With SunOne accounts, there may be no ':' in
                         * organizer.value. */
-                       tmp = g_strdup_printf (_("Organizer: %s"), organizer.cn);
+                       tmp = g_strdup_printf (_("Organizer: %s"), e_cal_component_organizer_get_cn 
(organizer));
                }
 
                l = gtk_label_new (tmp);
@@ -826,7 +823,9 @@ task_table_query_tooltip (GtkWidget *widget,
                gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text);
        }
 
-       e_cal_component_get_location (new_comp, &str);
+       e_cal_component_organizer_free (organizer);
+
+       str = e_cal_component_get_location (new_comp);
 
        if (str) {
                /* Translators: It will display "Location: PlaceOfTheMeeting" */
@@ -839,20 +838,21 @@ task_table_query_tooltip (GtkWidget *widget,
                gtk_label_set_max_width_chars ((GtkLabel *) l, 80);
                gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0);
                g_free (tmp);
+               g_free (str);
        }
 
-       e_cal_component_get_dtstart (new_comp, &dtstart);
-       e_cal_component_get_due (new_comp, &dtdue);
+       dtstart = e_cal_component_get_dtstart (new_comp);
+       dtdue = e_cal_component_get_due (new_comp);
 
        default_zone = e_cal_model_get_timezone (model);
 
-       if (dtstart.tzid) {
-               zone = icalcomponent_get_timezone (
+       if (dtstart && e_cal_component_datetime_get_tzid (dtstart)) {
+               zone = i_cal_component_get_timezone (
                        e_cal_component_get_icalcomponent (new_comp),
-                       dtstart.tzid);
+                       e_cal_component_datetime_get_tzid (dtstart));
                if (!zone)
                        e_cal_client_get_timezone_sync (
-                               comp_data->client, dtstart.tzid, &zone, NULL, NULL);
+                               comp_data->client, e_cal_component_datetime_get_tzid (dtstart), &zone, NULL, 
NULL);
                if (!zone)
                        zone = default_zone;
        } else {
@@ -861,12 +861,12 @@ task_table_query_tooltip (GtkWidget *widget,
 
        tmp2 = g_string_new ("");
 
-       if (dtstart.value) {
+       if (dtstart && e_cal_component_datetime_get_value (dtstart)) {
                gchar *str;
 
-               tmp_tm = icaltimetype_to_tm_with_zone (dtstart.value, zone, default_zone);
+               tmp_tm = icaltimetype_to_tm_with_zone (e_cal_component_datetime_get_value (dtstart), zone, 
default_zone);
                str = e_datetime_format_format_tm ("calendar", "table",
-                       dtstart.value->is_date ? DTFormatKindDate : DTFormatKindDateTime,
+                       i_cal_time_is_date (e_cal_component_datetime_get_value (dtstart)) ? DTFormatKindDate 
: DTFormatKindDateTime,
                        &tmp_tm);
 
                if (str && *str) {
@@ -877,12 +877,12 @@ task_table_query_tooltip (GtkWidget *widget,
                g_free (str);
        }
 
-       if (dtdue.value) {
+       if (dtdue && e_cal_component_datetime_get_value (dtdue)) {
                gchar *str;
 
-               tmp_tm = icaltimetype_to_tm_with_zone (dtdue.value, zone, default_zone);
+               tmp_tm = icaltimetype_to_tm_with_zone (e_cal_component_datetime_get_value (dtdue), zone, 
default_zone);
                str = e_datetime_format_format_tm ("calendar", "table",
-                       dtdue.value->is_date ? DTFormatKindDate : DTFormatKindDateTime,
+                       i_cal_time_is_date (e_cal_component_datetime_get_value (dtdue)) ? DTFormatKindDate : 
DTFormatKindDateTime,
                        &tmp_tm);
 
                if (str && *str) {
@@ -906,8 +906,8 @@ task_table_query_tooltip (GtkWidget *widget,
 
        g_string_free (tmp2, TRUE);
 
-       e_cal_component_free_datetime (&dtstart);
-       e_cal_component_free_datetime (&dtdue);
+       e_cal_component_datetime_free (dtstart);
+       e_cal_component_datetime_free (dtdue);
 
        tmp = e_cal_model_get_attendees_status_info (
                model, new_comp, comp_data->client);
@@ -934,13 +934,13 @@ task_table_query_tooltip (GtkWidget *widget,
        }
 
        tmp2 = g_string_new ("");
-       e_cal_component_get_description_list (new_comp, &desc);
+       desc = e_cal_component_get_descriptions (new_comp);
        for (len = 0, p = desc; p != NULL; p = p->next) {
                ECalComponentText *text = p->data;
 
-               if (text->value != NULL) {
-                       len += strlen (text->value);
-                       g_string_append (tmp2, text->value);
+               if (text && e_cal_component_text_get_value (text)) {
+                       len += strlen (e_cal_component_text_get_value (text));
+                       g_string_append (tmp2, e_cal_component_text_get_value (text));
                        if (len > 1024) {
                                g_string_set_size (tmp2, 1020);
                                g_string_append (tmp2, "...");
@@ -948,7 +948,7 @@ task_table_query_tooltip (GtkWidget *widget,
                        }
                }
        }
-       e_cal_component_free_text_list (desc);
+       g_slist_free_full (desc, e_cal_component_text_free);
 
        if (tmp2->len) {
                l = gtk_label_new (tmp2->str);
@@ -1174,12 +1174,11 @@ copy_row_cb (gint model_row,
        ETaskTable *task_table;
        ECalModelComponent *comp_data;
        ECalModel *model;
-       gchar *comp_str;
-       icalcomponent *child;
+       ICalComponent *child;
 
        task_table = E_TASK_TABLE (data);
 
-       g_return_if_fail (task_table->tmp_vcal != NULL);
+       g_return_if_fail (task_table->priv->tmp_vcal != NULL);
 
        model = e_task_table_get_model (task_table);
        comp_data = e_cal_model_get_component_at (model, model_row);
@@ -1188,18 +1187,13 @@ copy_row_cb (gint model_row,
 
        /* Add timezones to the VCALENDAR component. */
        e_cal_util_add_timezones_from_component (
-               task_table->tmp_vcal, comp_data->icalcomp);
+               task_table->priv->tmp_vcal, comp_data->icalcomp);
 
        /* Add the new component to the VCALENDAR component. */
-       comp_str = icalcomponent_as_ical_string_r (comp_data->icalcomp);
-       child = icalparser_parse_string (comp_str);
+       child = i_cal_component_new_clone (comp_data->icalcomp);
        if (child) {
-               icalcomponent_add_component (
-                       task_table->tmp_vcal,
-                       icalcomponent_new_clone (child));
-               icalcomponent_free (child);
+               i_cal_component_take_component (task_table->priv->tmp_vcal, child);
        }
-       g_free (comp_str);
 }
 
 static void
@@ -1212,11 +1206,11 @@ task_table_copy_clipboard (ESelectable *selectable)
        task_table = E_TASK_TABLE (selectable);
 
        /* Create a temporary VCALENDAR object. */
-       task_table->tmp_vcal = e_cal_util_new_top_level ();
+       task_table->priv->tmp_vcal = e_cal_util_new_top_level ();
 
        e_table_selected_row_foreach (
                E_TABLE (task_table), copy_row_cb, task_table);
-       comp_str = icalcomponent_as_ical_string_r (task_table->tmp_vcal);
+       comp_str = i_cal_component_as_ical_string_r (task_table->priv->tmp_vcal);
 
        clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
        e_clipboard_set_calendar (clipboard, comp_str, -1);
@@ -1224,8 +1218,7 @@ task_table_copy_clipboard (ESelectable *selectable)
 
        g_free (comp_str);
 
-       icalcomponent_free (task_table->tmp_vcal);
-       task_table->tmp_vcal = NULL;
+       g_clear_object (&task_table->priv->tmp_vcal);
 }
 
 /* Helper for calenable_table_paste_clipboard() */
@@ -1321,23 +1314,23 @@ static void
 add_retract_data (ECalComponent *comp,
                   const gchar *retract_comment)
 {
-       icalcomponent *icalcomp = NULL;
-       icalproperty *icalprop = NULL;
+       ICalComponent *icomp = NULL;
+       ICalProperty *prop = NULL;
 
-       icalcomp = e_cal_component_get_icalcomponent (comp);
+       icomp = e_cal_component_get_icalcomponent (comp);
        if (retract_comment && *retract_comment)
-               icalprop = icalproperty_new_x (retract_comment);
+               prop = i_cal_property_new_x (retract_comment);
        else
-               icalprop = icalproperty_new_x ("0");
-       icalproperty_set_x_name (icalprop, "X-EVOLUTION-RETRACT-COMMENT");
-       icalcomponent_add_property (icalcomp, icalprop);
+               prop = i_cal_property_new_x ("0");
+       i_cal_property_set_x_name (prop, "X-EVOLUTION-RETRACT-COMMENT");
+       i_cal_component_take_property (icomp, prop);
 }
 
 static gboolean
 check_for_retract (ECalComponent *comp,
                    ECalClient *client)
 {
-       ECalComponentOrganizer org;
+       ECalComponentOrganizer *org;
        gchar *email = NULL;
        const gchar *strip = NULL;
        gboolean ret_val;
@@ -1348,15 +1341,21 @@ check_for_retract (ECalComponent *comp,
        if (!e_cal_client_check_save_schedules (client))
                return FALSE;
 
-       e_cal_component_get_organizer (comp, &org);
-       strip = itip_strip_mailto (org.value);
+       org = e_cal_component_get_organizer (comp);
+       strip = org ? itip_strip_mailto (e_cal_component_organizer_get_value (org)) : NULL;
+
+       if (!strip || !*strip) {
+               e_cal_component_organizer_free (org);
+               return FALSE;
+       }
 
        ret_val = e_client_get_backend_property_sync (
                E_CLIENT (client),
-               CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS,
+               E_CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS,
                &email, NULL, NULL) && email != NULL &&
                g_ascii_strcasecmp (email, strip) == 0;
 
+       e_cal_component_organizer_free (org);
        g_free (email);
 
        return ret_val;
@@ -1387,9 +1386,8 @@ task_table_delete_selection (ESelectable *selectable)
        /* FIXME: this may be something other than a TODO component */
 
        if (comp_data) {
-               comp = e_cal_component_new ();
-               e_cal_component_set_icalcomponent (
-                       comp, icalcomponent_new_clone (comp_data->icalcomp));
+               comp = e_cal_component_new_from_icalcomponent (
+                       i_cal_component_new_clone (comp_data->icalcomp));
        }
 
        if ((n_selected == 1) && comp && check_for_retract (comp, comp_data->client)) {
@@ -1398,13 +1396,13 @@ task_table_delete_selection (ESelectable *selectable)
 
                delete = e_cal_dialogs_prompt_retract (GTK_WIDGET (task_table), comp, &retract_comment, 
&retract);
                if (retract) {
-                       icalcomponent *icalcomp = NULL;
+                       ICalComponent *icomp;
 
                        add_retract_data (comp, retract_comment);
-                       icalcomp = e_cal_component_get_icalcomponent (comp);
-                       icalcomponent_set_method (icalcomp, ICAL_METHOD_CANCEL);
+                       icomp = e_cal_component_get_icalcomponent (comp);
+                       i_cal_component_set_method (icomp, I_CAL_METHOD_CANCEL);
 
-                       e_cal_ops_send_component (model, comp_data->client, icalcomp);
+                       e_cal_ops_send_component (model, comp_data->client, icomp);
                }
 
                g_free (retract_comment);
@@ -1417,9 +1415,7 @@ task_table_delete_selection (ESelectable *selectable)
        if (delete)
                delete_selected_components (task_table);
 
-       /* free memory */
-       if (comp)
-               g_object_unref (comp);
+       g_clear_object (&comp);
 }
 
 static void
@@ -1704,7 +1700,7 @@ hide_completed_rows_ready (GObject *source_object,
                ECalComponent *comp = e_cal_component_new ();
 
                e_cal_component_set_icalcomponent (
-                       comp, icalcomponent_new_clone (m->data));
+                       comp, i_cal_component_new_clone (m->data));
                id = e_cal_component_get_id (comp);
 
                comp_data = e_cal_model_get_component_for_client_and_uid (model, cal_client, id);
@@ -1718,7 +1714,7 @@ hide_completed_rows_ready (GObject *source_object,
                                E_TABLE_MODEL (model), pos);
                        changed = TRUE;
                }
-               e_cal_component_free_id (id);
+               e_cal_component_id_free (id);
                g_object_unref (comp);
        }
 
@@ -1775,7 +1771,7 @@ show_completed_rows_ready (GObject *source_object,
                ECalComponent *comp = e_cal_component_new ();
 
                e_cal_component_set_icalcomponent (
-                       comp, icalcomponent_new_clone (m->data));
+                       comp, i_cal_component_new_clone (m->data));
                id = e_cal_component_get_id (comp);
 
                if (!(e_cal_model_get_component_for_client_and_uid (model, cal_client, id))) {
@@ -1784,7 +1780,7 @@ show_completed_rows_ready (GObject *source_object,
                                E_TYPE_CAL_MODEL_COMPONENT, NULL);
                        comp_data->client = g_object_ref (cal_client);
                        comp_data->icalcomp =
-                               icalcomponent_new_clone (m->data);
+                               i_cal_component_new_clone (m->data);
                        e_cal_model_set_instance_times (
                                comp_data,
                                e_cal_model_get_timezone (model));
@@ -1799,7 +1795,7 @@ show_completed_rows_ready (GObject *source_object,
                                E_TABLE_MODEL (model),
                                comp_objects->len - 1);
                }
-               e_cal_component_free_id (id);
+               e_cal_component_id_free (id);
                g_object_unref (comp);
        }
 
@@ -1815,24 +1811,19 @@ e_task_table_get_current_time (ECellDateEdit *ecde,
 {
        ETaskTable *task_table = data;
        ECalModel *model;
-       icaltimezone *zone;
-       struct tm tmp_tm = { 0 };
-       struct icaltimetype tt;
+       ICalTimezone *zone;
+       ICalTimetype *tt;
+       struct tm tmp_tm;
 
        /* Get the current timezone. */
        model = e_task_table_get_model (task_table);
        zone = e_cal_model_get_timezone (model);
 
-       tt = icaltime_from_timet_with_zone (time (NULL), FALSE, zone);
+       tt = i_cal_time_from_timet_with_zone (time (NULL), FALSE, zone);
+
+       tmp_tm = icaltimetype_to_tm (tt);
 
-       /* Now copy it to the struct tm and return it. */
-       tmp_tm.tm_year = tt.year - 1900;
-       tmp_tm.tm_mon = tt.month - 1;
-       tmp_tm.tm_mday = tt.day;
-       tmp_tm.tm_hour = tt.hour;
-       tmp_tm.tm_min = tt.minute;
-       tmp_tm.tm_sec = tt.second;
-       tmp_tm.tm_isdst = -1;
+       g_clear_object (&tt);
 
        return tmp_tm;
 }
diff --git a/src/calendar/gui/e-task-table.h b/src/calendar/gui/e-task-table.h
index 72995878e8..f87517183d 100644
--- a/src/calendar/gui/e-task-table.h
+++ b/src/calendar/gui/e-task-table.h
@@ -62,12 +62,6 @@ typedef struct _ETaskTablePrivate ETaskTablePrivate;
 struct _ETaskTable {
        ETable parent;
 
-       /* The ECell used to view & edit dates. */
-       ECellDateEdit *dates_cell;
-
-       /* Fields used for cut/copy/paste */
-       ICalComponent *tmp_vcal;
-
        ETaskTablePrivate *priv;
 };
 



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