aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/dialogs/comp-editor-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/dialogs/comp-editor-util.c')
-rw-r--r--calendar/gui/dialogs/comp-editor-util.c70
1 files changed, 39 insertions, 31 deletions
diff --git a/calendar/gui/dialogs/comp-editor-util.c b/calendar/gui/dialogs/comp-editor-util.c
index 375d51918f..5d10942a5e 100644
--- a/calendar/gui/dialogs/comp-editor-util.c
+++ b/calendar/gui/dialogs/comp-editor-util.c
@@ -46,20 +46,13 @@
* @comp: The component to extract the dates from
*
* Extracts the dates from the calendar component into the
- * CompEditorPageDates structure. Note that it returns pointers to static
- * structs, so these will be overwritten in the next call.
+ * CompEditorPageDates structure. Call comp_editor_free_dates() to free the
+ * results.
**/
void
comp_editor_dates (CompEditorPageDates *dates, CalComponent *comp)
{
- static struct icaltimetype start;
- static struct icaltimetype end;
- static struct icaltimetype due;
- static struct icaltimetype complete;
-
CalComponentDateTime dt;
- struct icaltimetype *comp_complete;
-
dates->start = NULL;
dates->end = NULL;
@@ -68,33 +61,46 @@ comp_editor_dates (CompEditorPageDates *dates, CalComponent *comp)
cal_component_get_dtstart (comp, &dt);
if (dt.value) {
- start = *dt.value;
- dates->start = &start;
+ dates->start = g_new (CalComponentDateTime, 1);
+ *dates->start = dt;
}
- cal_component_free_datetime (&dt);
cal_component_get_dtend (comp, &dt);
if (dt.value) {
- end = *dt.value;
- dates->end = &end;
+ dates->end = g_new (CalComponentDateTime, 1);
+ *dates->end = dt;
}
- cal_component_free_datetime (&dt);
cal_component_get_due (comp, &dt);
if (dt.value) {
- due = *dt.value;
- dates->due = &due;
+ dates->due = g_new (CalComponentDateTime, 1);
+ *dates->due = dt;
}
- cal_component_free_datetime (&dt);
- cal_component_get_completed (comp, &comp_complete);
- if (comp_complete) {
- complete = *comp_complete;
- dates->complete = &complete;
- cal_component_free_icaltimetype (comp_complete);
- }
+ cal_component_get_completed (comp, &dates->complete);
}
+
+/* This frees the dates in the CompEditorPageDates struct. But it doesn't free
+ * the struct (as that is usually static).
+ */
+void
+comp_editor_free_dates (CompEditorPageDates *dates)
+{
+ if (dates->start)
+ cal_component_free_datetime (dates->start);
+
+ if (dates->end)
+ cal_component_free_datetime (dates->end);
+
+ if (dates->due)
+ cal_component_free_datetime (dates->due);
+
+ if (dates->complete)
+ cal_component_free_icaltimetype (dates->complete);
+}
+
+
static void
write_label_piece (struct icaltimetype *tt, char *buffer, int size,
char *stext, char *etext)
@@ -143,20 +149,22 @@ comp_editor_date_label (CompEditorPageDates *dates, GtkWidget *label)
buffer[0] = '\0';
- if (dates->start && !icaltime_is_null_time (*dates->start))
+ if (dates->start && !icaltime_is_null_time (*dates->start->value))
start_set = TRUE;
- if (dates->end && !icaltime_is_null_time (*dates->end))
+ if (dates->end && !icaltime_is_null_time (*dates->end->value))
end_set = TRUE;
if (dates->complete && !icaltime_is_null_time (*dates->complete))
complete_set = TRUE;
- if (dates->due && !icaltime_is_null_time (*dates->due))
+ if (dates->due && !icaltime_is_null_time (*dates->due->value))
due_set = TRUE;
if (start_set)
- write_label_piece (dates->start, buffer, 1024, NULL, NULL);
+ write_label_piece (dates->start->value, buffer, 1024,
+ NULL, NULL);
if (start_set && end_set)
- write_label_piece (dates->end, buffer, 1024, _(" to "), NULL);
+ write_label_piece (dates->end->value, buffer, 1024,
+ _(" to "), NULL);
if (complete_set) {
if (start_set)
@@ -167,9 +175,9 @@ comp_editor_date_label (CompEditorPageDates *dates, GtkWidget *label)
if (due_set && dates->complete == NULL) {
if (start_set)
- write_label_piece (dates->due, buffer, 1024, _(" (Due "), ")");
+ write_label_piece (dates->due->value, buffer, 1024, _(" (Due "), ")");
else
- write_label_piece (dates->due, buffer, 1024, _("Due "), NULL);
+ write_label_piece (dates->due->value, buffer, 1024, _("Due "), NULL);
}
gtk_label_set_text (GTK_LABEL (label), buffer);