aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-util/cal-component.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@helixcode.com>2000-07-20 09:06:52 +0800
committerFederico Mena Quintero <federico@src.gnome.org>2000-07-20 09:06:52 +0800
commitcb1c400a5007f81228e8d620f87cb1adeb86fbce (patch)
tree0313786e2d5e25c26f1239c7731b5e8b5463b952 /calendar/cal-util/cal-component.c
parent9dfeaac6e4d1e87e48f1016c8e490e58bb74f638 (diff)
downloadgsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar
gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.gz
gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.bz2
gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.lz
gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.xz
gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.zst
gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.zip
Finish filling the trigger. What a pain, again.
2000-07-19 Federico Mena Quintero <federico@helixcode.com> * cal-util/cal-component.c (cal_component_alarm_set_trigger): Finish filling the trigger. What a pain, again. (cal_component_alarm_free_trigger): Implemented. svn path=/trunk/; revision=4232
Diffstat (limited to 'calendar/cal-util/cal-component.c')
-rw-r--r--calendar/cal-util/cal-component.c83
1 files changed, 77 insertions, 6 deletions
diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c
index 0d5b829520..ec2523a261 100644
--- a/calendar/cal-util/cal-component.c
+++ b/calendar/cal-util/cal-component.c
@@ -2230,7 +2230,8 @@ cal_component_alarm_set_action (CalComponentAlarm *alarm, CalComponentAlarmActio
/**
* cal_component_alarm_get_trigger:
* @alarm: An alarm.
- * @trigger: Return value for the trigger time.
+ * @trigger: Return value for the trigger time. This should be freed using the
+ * cal_component_alarm_free_trigger() function.
*
* Queries the trigger time for an alarm.
**/
@@ -2322,37 +2323,107 @@ cal_component_alarm_get_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrig
}
}
+/**
+ * cal_component_alarm_set_trigger:
+ * @alarm: An alarm.
+ * @trigger: Trigger time structure.
+ *
+ * Sets the trigger time of an alarm.
+ **/
void
cal_component_alarm_set_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrigger *trigger)
{
union icaltriggertype t;
+ icalparameter *param;
+ icalparameter_value value_type;
+ icalparameter_related related;
g_return_if_fail (alarm != NULL);
g_return_if_fail (trigger != NULL);
g_assert (alarm->icalcomp != NULL);
+ /* Delete old trigger */
+
+ if (alarm->trigger) {
+ icalcomponent_remove_property (alarm->icalcomp, alarm->trigger);
+ icalproperty_free (alarm->trigger);
+ alarm->trigger = NULL;
+ }
+
/* Set the value */
+ value_type = ICAL_DURATION_VALUE; /* Keep GCC happy */
+ related = ICAL_RELATED_START; /* Ditto */
+
switch (trigger->type) {
case CAL_COMPONENT_ALARM_TRIGGER_RELATIVE:
t.duration = trigger->u.relative.duration;
+ value_type = ICAL_DURATION_VALUE;
+
+ switch (trigger->u.relative.related) {
+ case CAL_COMPONENT_ALARM_TRIGGER_RELATED_START:
+ related = ICAL_RELATED_START;
+ break;
+
+ case CAL_COMPONENT_ALARM_TRIGGER_RELATED_END:
+ related = ICAL_RELATED_END;
+ break;
+
+ default:
+ g_assert_not_reached ();
+ return;
+ }
+
break;
case CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE:
t.time = trigger->u.absolute;
+ value_type = ICAL_DATETIME_VALUE;
break;
default:
g_assert_not_reached ();
+ return;
}
- if (alarm->trigger)
- icalproperty_set_trigger (alarm->trigger, t);
+ alarm->trigger = icalproperty_new_trigger (t);
+ icalcomponent_add_property (alarm->icalcomp, alarm->trigger);
+
+ /* Value parameters */
+
+ param = icalproperty_get_first_parameter (alarm->trigger, ICAL_VALUE_PARAMETER);
+ if (param)
+ icalparameter_set_value (param, value_type);
else {
- alarm->trigger = icalproperty_new_trigger (t);
- icalcomponent_add_property (alarm->icalcomp, alarm->trigger);
+ param = icalparameter_new_value (value_type);
+ icalproperty_add_parameter (alarm->trigger, param);
+ }
+
+ /* Related parameter */
+
+ if (trigger->type == CAL_COMPONENT_ALARM_TRIGGER_RELATIVE) {
+ param = icalproperty_get_first_parameter (alarm->trigger, ICAL_RELATED_PARAMETER);
+
+ if (param)
+ icalparameter_set_related (param, related);
+ else {
+ param = icalparameter_new_related (related);
+ icalproperty_add_parameter (alarm->trigger, param);
+ }
}
+}
+
+/**
+ * cal_component_alarm_free_trigger:
+ * @trigger: A #CalComponentAlarmTrigger structure.
+ *
+ * Frees a #CalComponentAlarmTrigger structure.
+ **/
+void
+cal_component_alarm_free_trigger (CalComponentAlarmTrigger *trigger)
+{
+ g_return_if_fail (trigger != NULL);
- /* Set the parameters */
+ g_free (trigger);
}