aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-meeting-attendee.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/e-meeting-attendee.c')
-rw-r--r--calendar/gui/e-meeting-attendee.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/calendar/gui/e-meeting-attendee.c b/calendar/gui/e-meeting-attendee.c
index 1059537b84..3d27f676c0 100644
--- a/calendar/gui/e-meeting-attendee.c
+++ b/calendar/gui/e-meeting-attendee.c
@@ -26,6 +26,7 @@
#include <stdlib.h>
#include <gtk/gtk.h>
+#include "e-meeting-utils.h"
#include "e-meeting-attendee.h"
#define E_MEETING_ATTENDEE_GET_PRIVATE(obj) \
@@ -92,6 +93,20 @@ string_is_set (gchar *string)
}
static void
+busy_periods_array_clear_func (gpointer data)
+{
+ EMeetingFreeBusyPeriod *period = (EMeetingFreeBusyPeriod *) data;
+
+ /* We're expected to clear the data segment,
+ * but not deallocate the segment itself. The
+ * XFB data possibly attached to the
+ * EMeetingFreeBusyPeriod requires special
+ * care when removing elements from the GArray
+ */
+ e_meeting_xfb_data_clear (&(period->xfb));
+}
+
+static void
notify_changed (EMeetingAttendee *ia)
{
g_signal_emit_by_name (ia, "changed");
@@ -167,6 +182,7 @@ e_meeting_attendee_init (EMeetingAttendee *ia)
ia->priv->has_calendar_info = FALSE;
ia->priv->busy_periods = g_array_new (FALSE, FALSE, sizeof (EMeetingFreeBusyPeriod));
+ g_array_set_clear_func (ia->priv->busy_periods, busy_periods_array_clear_func);
ia->priv->busy_periods_sorted = FALSE;
g_date_clear (&ia->priv->busy_periods_start.date, 1);
@@ -816,7 +832,9 @@ e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
gint end_day,
gint end_hour,
gint end_minute,
- EMeetingFreeBusyType busy_type)
+ EMeetingFreeBusyType busy_type,
+ const gchar *summary,
+ const gchar *location)
{
EMeetingAttendeePrivate *priv;
EMeetingFreeBusyPeriod period;
@@ -825,6 +843,8 @@ e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
g_return_val_if_fail (ia != NULL, FALSE);
g_return_val_if_fail (E_IS_MEETING_ATTENDEE (ia), FALSE);
g_return_val_if_fail (busy_type < E_MEETING_FREE_BUSY_LAST, FALSE);
+ /* summary may be NULL (optional XFB data) */
+ /* location may be NULL (optional XFB data) */
priv = ia->priv;
@@ -925,6 +945,10 @@ e_meeting_attendee_add_busy_period (EMeetingAttendee *ia,
}
}
+ /* Setting of extended free/busy (XFB) data, if we have any. */
+ e_meeting_xfb_data_init (&(period.xfb));
+ e_meeting_xfb_data_set (&(period.xfb), summary, location);
+
g_array_append_val (priv->busy_periods, period);
period_in_days =