aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-date-time-list.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2010-11-02 23:49:38 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-11-05 02:19:50 +0800
commit1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b (patch)
treeb8d9f8b56ce226ac15e7cc5efe0e36ad084f41af /calendar/gui/e-date-time-list.c
parent0ab70ad33c4e22a176e89bb8a935aed8c7848e51 (diff)
downloadgsoc2013-evolution-1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b.tar
gsoc2013-evolution-1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b.tar.gz
gsoc2013-evolution-1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b.tar.bz2
gsoc2013-evolution-1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b.tar.lz
gsoc2013-evolution-1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b.tar.xz
gsoc2013-evolution-1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b.tar.zst
gsoc2013-evolution-1f17dab6b0d9c5413dea38dcc95e7a7bb5b4bd9b.zip
Move calendar preferences to the calendar module.
Continue replacing the use of calendar-config functions with GObject property bindings to EShellSettings properties.
Diffstat (limited to 'calendar/gui/e-date-time-list.c')
-rw-r--r--calendar/gui/e-date-time-list.c525
1 files changed, 263 insertions, 262 deletions
diff --git a/calendar/gui/e-date-time-list.c b/calendar/gui/e-date-time-list.c
index ab343a16f1..0b6afa34a6 100644
--- a/calendar/gui/e-date-time-list.c
+++ b/calendar/gui/e-date-time-list.c
@@ -26,133 +26,57 @@
#include <libedataserver/e-time-utils.h>
#include "e-date-time-list.h"
#include <libecal/e-cal-time-util.h>
-#include "calendar-config.h"
+
+/* XXX Was it really necessary to implement a custom GtkTreeModel for a
+ * one-column list store? There's no mention of why this was done. */
#define G_LIST(x) ((GList *) x)
#define E_DATE_TIME_LIST_IS_SORTED(list) (E_DATE_TIME_LIST (list)->sort_column_id != -2)
#define IS_VALID_ITER(dt_list, iter) (iter!= NULL && iter->user_data != NULL && \
dt_list->stamp == iter->stamp)
-static GType column_types[E_DATE_TIME_LIST_NUM_COLUMNS];
+enum {
+ PROP_0,
+ PROP_USE_24_HOUR_FORMAT
+};
-static void e_date_time_list_init (EDateTimeList *file_list);
-static void e_date_time_list_class_init (EDateTimeListClass *class);
-static void e_date_time_list_tree_model_init (GtkTreeModelIface *iface);
-static void e_date_time_list_finalize (GObject *object);
-static GtkTreeModelFlags e_date_time_list_get_flags (GtkTreeModel *tree_model);
-static gint e_date_time_list_get_n_columns (GtkTreeModel *tree_model);
-static GType e_date_time_list_get_column_type (GtkTreeModel *tree_model,
- gint index);
-static gboolean e_date_time_list_get_iter (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreePath *path);
-static GtkTreePath *e_date_time_list_get_path (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static void e_date_time_list_get_value (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gint column,
- GValue *value);
-static gboolean e_date_time_list_iter_next (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static gboolean e_date_time_list_iter_children (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent);
-static gboolean e_date_time_list_iter_has_child (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static gint e_date_time_list_iter_n_children (GtkTreeModel *tree_model,
- GtkTreeIter *iter);
-static gboolean e_date_time_list_iter_nth_child (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent,
- gint n);
-static gboolean e_date_time_list_iter_parent (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *child);
-
-static GObjectClass *parent_class = NULL;
-
-GType
-e_date_time_list_get_type (void)
-{
- static GType date_time_list_type = 0;
-
- if (!date_time_list_type) {
- static const GTypeInfo date_time_list_info =
- {
- sizeof (EDateTimeListClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) e_date_time_list_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (EDateTimeList),
- 0,
- (GInstanceInitFunc) e_date_time_list_init,
- };
-
- static const GInterfaceInfo tree_model_info =
- {
- (GInterfaceInitFunc) e_date_time_list_tree_model_init,
- NULL,
- NULL
- };
-
- column_types[E_DATE_TIME_LIST_COLUMN_DESCRIPTION] = G_TYPE_STRING;
+static GType column_types[E_DATE_TIME_LIST_NUM_COLUMNS];
- date_time_list_type = g_type_register_static (G_TYPE_OBJECT, "EDateTimeList",
- &date_time_list_info, 0);
- g_type_add_interface_static (date_time_list_type,
- GTK_TYPE_TREE_MODEL,
- &tree_model_info);
- }
+static void e_date_time_list_tree_model_init (GtkTreeModelIface *iface);
- return date_time_list_type;
-}
+G_DEFINE_TYPE_WITH_CODE (
+ EDateTimeList, e_date_time_list, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (
+ GTK_TYPE_TREE_MODEL, e_date_time_list_tree_model_init))
static void
-e_date_time_list_class_init (EDateTimeListClass *class)
+free_datetime (ECalComponentDateTime *datetime)
{
- GObjectClass *object_class;
-
- parent_class = g_type_class_peek_parent (class);
- object_class = (GObjectClass*) class;
-
- object_class->finalize = e_date_time_list_finalize;
+ g_free (datetime->value);
+ if (datetime->tzid)
+ g_free ((gchar *) datetime->tzid);
+ g_free (datetime);
}
-static void
-e_date_time_list_tree_model_init (GtkTreeModelIface *iface)
+static ECalComponentDateTime *
+copy_datetime (const ECalComponentDateTime *datetime)
{
- iface->get_flags = e_date_time_list_get_flags;
- iface->get_n_columns = e_date_time_list_get_n_columns;
- iface->get_column_type = e_date_time_list_get_column_type;
- iface->get_iter = e_date_time_list_get_iter;
- iface->get_path = e_date_time_list_get_path;
- iface->get_value = e_date_time_list_get_value;
- iface->iter_next = e_date_time_list_iter_next;
- iface->iter_children = e_date_time_list_iter_children;
- iface->iter_has_child = e_date_time_list_iter_has_child;
- iface->iter_n_children = e_date_time_list_iter_n_children;
- iface->iter_nth_child = e_date_time_list_iter_nth_child;
- iface->iter_parent = e_date_time_list_iter_parent;
-}
+ ECalComponentDateTime *datetime_copy;
-static void
-e_date_time_list_init (EDateTimeList *date_time_list)
-{
- date_time_list->stamp = g_random_int ();
- date_time_list->columns_dirty = FALSE;
- date_time_list->list = NULL;
-}
+ datetime_copy = g_new0 (ECalComponentDateTime, 1);
+ datetime_copy->value = g_new (struct icaltimetype, 1);
+ *datetime_copy->value = *datetime->value;
-EDateTimeList *
-e_date_time_list_new (void)
-{
- EDateTimeList *date_time_list;
+ if (datetime->tzid)
+ datetime_copy->tzid = g_strdup (datetime->tzid);
- date_time_list = E_DATE_TIME_LIST (g_object_new (e_date_time_list_get_type (), NULL));
+ return datetime_copy;
+}
- return date_time_list;
+static gint
+compare_datetime (const ECalComponentDateTime *datetime1, const ECalComponentDateTime *datetime2)
+{
+ return icaltime_compare (*datetime1->value, *datetime2->value);
}
static void
@@ -217,16 +141,74 @@ row_updated (EDateTimeList *date_time_list, gint n)
gtk_tree_path_free (path);
}
+/* Builds a static string out of an exception date */
+static gchar *
+get_exception_string (EDateTimeList *date_time_list,
+ ECalComponentDateTime *dt)
+{
+ static gchar buf[256];
+ struct tm tmp_tm;
+ gboolean use_24_hour_format;
+
+ use_24_hour_format =
+ e_date_time_list_get_use_24_hour_format (date_time_list);
+
+ tmp_tm.tm_year = dt->value->year - 1900;
+ tmp_tm.tm_mon = dt->value->month - 1;
+ tmp_tm.tm_mday = dt->value->day;
+ tmp_tm.tm_hour = dt->value->hour;
+ tmp_tm.tm_min = dt->value->minute;
+ tmp_tm.tm_sec = dt->value->second;
+ tmp_tm.tm_isdst = -1;
+
+ tmp_tm.tm_wday = time_day_of_week (dt->value->day,
+ dt->value->month - 1,
+ dt->value->year);
+
+ e_time_format_date_and_time (
+ &tmp_tm, use_24_hour_format,
+ FALSE, FALSE, buf, sizeof (buf));
+
+ return buf;
+}
+
+static void
+date_time_list_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_USE_24_HOUR_FORMAT:
+ e_date_time_list_set_use_24_hour_format (
+ E_DATE_TIME_LIST (object),
+ g_value_get_boolean (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
static void
-e_date_time_list_finalize (GObject *object)
+date_time_list_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- if (G_OBJECT_CLASS (parent_class)->finalize)
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+ switch (property_id) {
+ case PROP_USE_24_HOUR_FORMAT:
+ g_value_set_boolean (
+ value,
+ e_date_time_list_get_use_24_hour_format (
+ E_DATE_TIME_LIST (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
-/* Fulfill the GtkTreeModel requirements */
static GtkTreeModelFlags
-e_date_time_list_get_flags (GtkTreeModel *tree_model)
+date_time_list_get_flags (GtkTreeModel *tree_model)
{
g_return_val_if_fail (E_IS_DATE_TIME_LIST (tree_model), 0);
@@ -234,7 +216,7 @@ e_date_time_list_get_flags (GtkTreeModel *tree_model)
}
static gint
-e_date_time_list_get_n_columns (GtkTreeModel *tree_model)
+date_time_list_get_n_columns (GtkTreeModel *tree_model)
{
EDateTimeList *date_time_list = (EDateTimeList *) tree_model;
@@ -245,8 +227,8 @@ e_date_time_list_get_n_columns (GtkTreeModel *tree_model)
}
static GType
-e_date_time_list_get_column_type (GtkTreeModel *tree_model,
- gint index)
+date_time_list_get_column_type (GtkTreeModel *tree_model,
+ gint index)
{
EDateTimeList *date_time_list = (EDateTimeList *) tree_model;
@@ -258,105 +240,10 @@ e_date_time_list_get_column_type (GtkTreeModel *tree_model,
return column_types[index];
}
-const ECalComponentDateTime *
-e_date_time_list_get_date_time (EDateTimeList *date_time_list, GtkTreeIter *iter)
-{
- g_return_val_if_fail (IS_VALID_ITER (date_time_list, iter), NULL);
-
- return G_LIST (iter->user_data)->data;
-}
-
-static void
-free_datetime (ECalComponentDateTime *datetime)
-{
- g_free (datetime->value);
- if (datetime->tzid)
- g_free ((gchar *) datetime->tzid);
- g_free (datetime);
-}
-
-static ECalComponentDateTime *
-copy_datetime (const ECalComponentDateTime *datetime)
-{
- ECalComponentDateTime *datetime_copy;
-
- datetime_copy = g_new0 (ECalComponentDateTime, 1);
- datetime_copy->value = g_new (struct icaltimetype, 1);
- *datetime_copy->value = *datetime->value;
-
- if (datetime->tzid)
- datetime_copy->tzid = g_strdup (datetime->tzid);
-
- return datetime_copy;
-}
-
-static gint
-compare_datetime (const ECalComponentDateTime *datetime1, const ECalComponentDateTime *datetime2)
-{
- return icaltime_compare (*datetime1->value, *datetime2->value);
-}
-
-void
-e_date_time_list_set_date_time (EDateTimeList *date_time_list, GtkTreeIter *iter,
- const ECalComponentDateTime *datetime)
-{
- ECalComponentDateTime *datetime_old;
-
- g_return_if_fail (IS_VALID_ITER (date_time_list, iter));
-
- datetime_old = G_LIST (iter->user_data)->data;
- free_datetime (datetime_old);
- G_LIST (iter->user_data)->data = copy_datetime (datetime);
- row_updated (date_time_list, g_list_position (date_time_list->list, G_LIST (iter->user_data)));
-}
-
-void
-e_date_time_list_append (EDateTimeList *date_time_list, GtkTreeIter *iter,
- const ECalComponentDateTime *datetime)
-{
- g_return_if_fail (datetime != NULL);
-
- if (g_list_find_custom (date_time_list->list, datetime, (GCompareFunc)compare_datetime) == NULL) {
- date_time_list->list = g_list_append (date_time_list->list, copy_datetime (datetime));
- row_added (date_time_list, g_list_length (date_time_list->list) - 1);
- }
-
- if (iter) {
- iter->user_data = g_list_last (date_time_list->list);
- iter->stamp = date_time_list->stamp;
- }
-}
-
-void
-e_date_time_list_remove (EDateTimeList *date_time_list, GtkTreeIter *iter)
-{
- gint n;
-
- g_return_if_fail (IS_VALID_ITER (date_time_list, iter));
-
- n = g_list_position (date_time_list->list, G_LIST (iter->user_data));
- free_datetime ((ECalComponentDateTime *) G_LIST (iter->user_data)->data);
- date_time_list->list = g_list_delete_link (date_time_list->list, G_LIST (iter->user_data));
- row_deleted (date_time_list, n);
-}
-
-void
-e_date_time_list_clear (EDateTimeList *date_time_list)
-{
- GList *l;
-
- all_rows_deleted (date_time_list);
-
- for (l = date_time_list->list; l; l = g_list_next (l)) {
- free_datetime ((ECalComponentDateTime *) l->data);
- }
-
- g_list_free (date_time_list->list);
- date_time_list->list = NULL;
-}
-
static gboolean
-e_date_time_list_get_iter (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path)
+date_time_list_get_iter (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ GtkTreePath *path)
{
EDateTimeList *date_time_list = (EDateTimeList *) tree_model;
GList *l;
@@ -381,8 +268,8 @@ e_date_time_list_get_iter (GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeP
}
static GtkTreePath *
-e_date_time_list_get_path (GtkTreeModel *tree_model,
- GtkTreeIter *iter)
+date_time_list_get_path (GtkTreeModel *tree_model,
+ GtkTreeIter *iter)
{
EDateTimeList *date_time_list = (EDateTimeList *) tree_model;
GtkTreePath *retval;
@@ -397,36 +284,11 @@ e_date_time_list_get_path (GtkTreeModel *tree_model,
return retval;
}
-/* Builds a static string out of an exception date */
-static gchar *
-get_exception_string (ECalComponentDateTime *dt)
-{
- static gchar buf[256];
- struct tm tmp_tm;
-
- tmp_tm.tm_year = dt->value->year - 1900;
- tmp_tm.tm_mon = dt->value->month - 1;
- tmp_tm.tm_mday = dt->value->day;
- tmp_tm.tm_hour = dt->value->hour;
- tmp_tm.tm_min = dt->value->minute;
- tmp_tm.tm_sec = dt->value->second;
- tmp_tm.tm_isdst = -1;
-
- tmp_tm.tm_wday = time_day_of_week (dt->value->day,
- dt->value->month - 1,
- dt->value->year);
-
- e_time_format_date_and_time (&tmp_tm, calendar_config_get_24_hour_format (),
- FALSE, FALSE, buf, sizeof (buf));
-
- return buf;
-}
-
static void
-e_date_time_list_get_value (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gint column,
- GValue *value)
+date_time_list_get_value (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gint column,
+ GValue *value)
{
EDateTimeList *date_time_list = E_DATE_TIME_LIST (tree_model);
ECalComponentDateTime *datetime;
@@ -451,15 +313,15 @@ e_date_time_list_get_value (GtkTreeModel *tree_model,
switch (column) {
case E_DATE_TIME_LIST_COLUMN_DESCRIPTION:
- str = get_exception_string (datetime);
+ str = get_exception_string (date_time_list, datetime);
g_value_set_string (value, str);
break;
}
}
static gboolean
-e_date_time_list_iter_next (GtkTreeModel *tree_model,
- GtkTreeIter *iter)
+date_time_list_iter_next (GtkTreeModel *tree_model,
+ GtkTreeIter *iter)
{
GList *l;
@@ -480,9 +342,9 @@ e_date_time_list_iter_next (GtkTreeModel *tree_model,
}
static gboolean
-e_date_time_list_iter_children (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent)
+date_time_list_iter_children (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ GtkTreeIter *parent)
{
EDateTimeList *date_time_list = E_DATE_TIME_LIST (tree_model);
@@ -502,16 +364,16 @@ e_date_time_list_iter_children (GtkTreeModel *tree_model,
}
static gboolean
-e_date_time_list_iter_has_child (GtkTreeModel *tree_model,
- GtkTreeIter *iter)
+date_time_list_iter_has_child (GtkTreeModel *tree_model,
+ GtkTreeIter *iter)
{
g_return_val_if_fail (IS_VALID_ITER (E_DATE_TIME_LIST (tree_model), iter), FALSE);
return FALSE;
}
static gint
-e_date_time_list_iter_n_children (GtkTreeModel *tree_model,
- GtkTreeIter *iter)
+date_time_list_iter_n_children (GtkTreeModel *tree_model,
+ GtkTreeIter *iter)
{
EDateTimeList *date_time_list = E_DATE_TIME_LIST (tree_model);
@@ -525,10 +387,10 @@ e_date_time_list_iter_n_children (GtkTreeModel *tree_model,
}
static gboolean
-e_date_time_list_iter_nth_child (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent,
- gint n)
+date_time_list_iter_nth_child (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ GtkTreeIter *parent,
+ gint n)
{
EDateTimeList *date_time_list = E_DATE_TIME_LIST (tree_model);
@@ -553,9 +415,148 @@ e_date_time_list_iter_nth_child (GtkTreeModel *tree_model,
}
static gboolean
-e_date_time_list_iter_parent (GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *child)
+date_time_list_iter_parent (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ GtkTreeIter *child)
{
return FALSE;
}
+
+static void
+e_date_time_list_class_init (EDateTimeListClass *class)
+{
+ GObjectClass *object_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;
+
+ g_object_class_install_property (
+ object_class,
+ PROP_USE_24_HOUR_FORMAT,
+ g_param_spec_boolean (
+ "use-24-hour-format",
+ "Use 24-hour Format",
+ NULL,
+ FALSE,
+ G_PARAM_READWRITE));
+
+ column_types[E_DATE_TIME_LIST_COLUMN_DESCRIPTION] = G_TYPE_STRING;
+}
+
+static void
+e_date_time_list_init (EDateTimeList *date_time_list)
+{
+ date_time_list->stamp = g_random_int ();
+ date_time_list->columns_dirty = FALSE;
+ date_time_list->list = NULL;
+}
+
+static void
+e_date_time_list_tree_model_init (GtkTreeModelIface *iface)
+{
+ iface->get_flags = date_time_list_get_flags;
+ iface->get_n_columns = date_time_list_get_n_columns;
+ iface->get_column_type = date_time_list_get_column_type;
+ iface->get_iter = date_time_list_get_iter;
+ iface->get_path = date_time_list_get_path;
+ iface->get_value = date_time_list_get_value;
+ iface->iter_next = date_time_list_iter_next;
+ iface->iter_children = date_time_list_iter_children;
+ iface->iter_has_child = date_time_list_iter_has_child;
+ iface->iter_n_children = date_time_list_iter_n_children;
+ iface->iter_nth_child = date_time_list_iter_nth_child;
+ iface->iter_parent = date_time_list_iter_parent;
+}
+
+EDateTimeList *
+e_date_time_list_new (void)
+{
+ return g_object_new (E_TYPE_DATE_TIME_LIST, NULL);
+}
+
+const ECalComponentDateTime *
+e_date_time_list_get_date_time (EDateTimeList *date_time_list, GtkTreeIter *iter)
+{
+ g_return_val_if_fail (IS_VALID_ITER (date_time_list, iter), NULL);
+
+ return G_LIST (iter->user_data)->data;
+}
+
+void
+e_date_time_list_set_date_time (EDateTimeList *date_time_list, GtkTreeIter *iter,
+ const ECalComponentDateTime *datetime)
+{
+ ECalComponentDateTime *datetime_old;
+
+ g_return_if_fail (IS_VALID_ITER (date_time_list, iter));
+
+ datetime_old = G_LIST (iter->user_data)->data;
+ free_datetime (datetime_old);
+ G_LIST (iter->user_data)->data = copy_datetime (datetime);
+ row_updated (date_time_list, g_list_position (date_time_list->list, G_LIST (iter->user_data)));
+}
+
+gboolean
+e_date_time_list_get_use_24_hour_format (EDateTimeList *date_time_list)
+{
+ g_return_val_if_fail (E_IS_DATE_TIME_LIST (date_time_list), FALSE);
+
+ return date_time_list->use_24_hour_format;
+}
+
+void
+e_date_time_list_set_use_24_hour_format (EDateTimeList *date_time_list,
+ gboolean use_24_hour_format)
+{
+ g_return_if_fail (E_IS_DATE_TIME_LIST (date_time_list));
+
+ date_time_list->use_24_hour_format = use_24_hour_format;
+
+ g_object_notify (G_OBJECT (date_time_list), "use-24-hour-format");
+}
+
+void
+e_date_time_list_append (EDateTimeList *date_time_list, GtkTreeIter *iter,
+ const ECalComponentDateTime *datetime)
+{
+ g_return_if_fail (datetime != NULL);
+
+ if (g_list_find_custom (date_time_list->list, datetime, (GCompareFunc)compare_datetime) == NULL) {
+ date_time_list->list = g_list_append (date_time_list->list, copy_datetime (datetime));
+ row_added (date_time_list, g_list_length (date_time_list->list) - 1);
+ }
+
+ if (iter) {
+ iter->user_data = g_list_last (date_time_list->list);
+ iter->stamp = date_time_list->stamp;
+ }
+}
+
+void
+e_date_time_list_remove (EDateTimeList *date_time_list, GtkTreeIter *iter)
+{
+ gint n;
+
+ g_return_if_fail (IS_VALID_ITER (date_time_list, iter));
+
+ n = g_list_position (date_time_list->list, G_LIST (iter->user_data));
+ free_datetime ((ECalComponentDateTime *) G_LIST (iter->user_data)->data);
+ date_time_list->list = g_list_delete_link (date_time_list->list, G_LIST (iter->user_data));
+ row_deleted (date_time_list, n);
+}
+
+void
+e_date_time_list_clear (EDateTimeList *date_time_list)
+{
+ GList *l;
+
+ all_rows_deleted (date_time_list);
+
+ for (l = date_time_list->list; l; l = g_list_next (l)) {
+ free_datetime ((ECalComponentDateTime *) l->data);
+ }
+
+ g_list_free (date_time_list->list);
+ date_time_list->list = NULL;
+}